簡體   English   中英

創建兩個作業時,Spring Boot @Scheduled 的 cron 作業無法正常工作

[英]Spring Boot @Scheduled's cron job doesn't work properly when created two jobs

我想做的事

我正在使用 kotlin 的 Spring Boot 的 @Scheduled 函數創建兩個批處理進程。

  1. 批量檢索每天上午 00:00(日本時間)運行的數據
  2. 批量整合每天凌晨 03:00(日本時間)運行的數據

問題

我能夠從日志中確認在 00:00 執行的批處理正常工作,但我無法確認批處理 2 的執行。

有問題的源代碼

以下是應用程序代碼。

@Service
class ScheduledTaskService {

    @Scheduled(cron = "\${task.fetch-data.cron}", zone = "\${task.fetch-data.zone}")
    fun fetchData() {
        println("The time is now " + ZonedDateTime.now(ZoneId.of("Asia/Tokyo")).toString())
        println("start to fetch data")
    }

    @Scheduled(cron = "\${task.integrate-data.cron}", zone = "\${task.integrate-data.zone}")
    fun integrateData() {
        println("The time is now " + ZonedDateTime.now(ZoneId.of("Asia/Tokyo")).toString())
        println("start to integrate data")
    }
}

以下是application.yml

task:
  fetch-data:
    cron: ${TASK_FETCH_DATA_CRON:0 0 0 * * *}
    zone: ${TASK_FETCH_DATA_ZONE:Asia/Tokyo}
  integrate-data:
    cron: ${TASK_INTEGRATE_DATA_CRON:0 0 3 * * *}
    zone: ${TASK_INTEGRATE_DATA_ZONE:Asia/Tokyo}

我還在主類中添加了@EnableScheduling

@SpringBootApplication
@EnableTransactionManagement
@ConfigurationPropertiesScan
@EnableScheduling
class APIApplication(private val apiConfig: APIConfig) : ApplicationListener<ApplicationReadyEvent> {
...

我嘗試過的事情

不同時間驗證

第 1 批次:上午 11:00

第 2 批次:下午 12:00

結果:第1 批有效,第 2 批沒有

設置執行時間為 2 到 1 分鍾后 1

第 1 批次:下午 12:20

第 2 批次:下午 12:21

結果: 1 和 2 都有效

將1和2的執行時序改為2->1個順序

第 1 批次:下午 14:30

第 2 批次:下午 14:05

結果:第2 批有效,第 1 批沒有

我目前正在調查結果可能因服務器啟動和批處理執行之間的時間而異的可能性。

如果您有任何想法,我很樂意聽取他們的意見。

附加信息(固件/工具版本等)

  • PC:macOS Big Sur 2.5GHz 四核 Intel Core i7,16GM 內存
  • 項目 SDK:Java 11 (Amazon correto)
  • Spring Boot 版本:2.2.4.RELEASE
  • 編輯:IntelliJ

你的 cron 看起來有點不對勁。 @Scheduled spring 使用Spring Cron

spring cron的格式

你的 cron 表達式應該是

午夜: "0 0 0 * * *" 你也可以在這里使用@midnight

凌晨 3 點: "0 0 3 * * *"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM