網頁

2020/10/9

Spring Boot disable @EnableScheduling

停用Spring Boot的@EnableScheduling的方式如下。

停用@EnableScheduling的簡單方式就是註解掉,但若設定好的@EnableScheduling排程工作要在某些情況不執行(例如單元測試),在正式環境運行時要執行,可利用@ConditionalOnProperty讀取properties檔的設定來決定是否套用@EnableScheduling來啟用排程。


在設定檔application.properties新增一自訂參數scheduling.enabled,此參數的值可為truefalse,為下面@ConditionalOnProperty讀取的value屬性值。

application.properties

#Scheduling
scheduling.enabled=true

配置類SchedulingConfig@EnableScheduling前加上@ConditionalOnProperty設定如下。

SchedulingConfig

package com.abc.demo.config;

import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;

@ConditionalOnProperty(
        value = "scheduling.enabled", // 讀取application.properties的scheduling.enabled的值
        havingValue = "true", // scheduling.enabled為true則套用下面的annotation即@EnableScheduling的效果,反之@EnableScheduling會無效果
        matchIfMissing = false // default, 若scheduling.enabled沒設定則預設為false
)
@EnableScheduling // 依上面@ConditionalOnProperty的條件決定是否套用
@Configuration
public class SchedulingConfig {
}

則當scheduling.enabled=false@ConditionalOnProperty不成立,因此@EnableScheduling不會被套用,排程不執行。


參考github


沒有留言:

張貼留言