簡體   English   中英

spring boot scheduling在方法級別啟用/禁用任務

[英]spring boot scheduling enable/disable tasks in method level

我按照本指南開始在spring boot https://spring.io/guides/gs/scheduling-tasks/中安排任務。

我想在同一個類中為不同的任務添加更多方法,想知道是否可以通過屬性和@ConditionalOnProperty啟用/禁用方法級別的任務,似乎@ConditionalOnProperty適用於類級別,而不是方法級別(根據下面的代碼示例,這不起作用)。 任何替代方法? 或者必須創建另一個類,包括任務2,以便單獨禁用/啟用它們?

@Component    
public class SchedulingTasks {

    private static final Logger log =    LoggerFactory.getLogger(SchedulingTasks.class);

    @Scheduled(fixedRate = 50000)
    public void jobOne() {
        log.info("job one started at {}", LocalDateTime.now());
    }

    @Scheduled(fixedRate = 50000)
    @ConditionalOnProperty(name="job.two", havingValue="true")  
    public void jobTwo() {
        log.info("just two started at {}", LocalDateTime.now());
    }
}

您可以將@ConditionalOnProperty應用於方法和類型,但似乎這僅適用於注冊Bean的方法(請參閱@Conditional文檔)。

您應該創建單獨的Bean,您可以使用@ConditionalOnProperty控制注冊,然后將@Scheduled注釋應用於Bean中的方法。

例:

@Slf4j
@Service
@ConditionalOnProperty(prefix = "schedule", name = {"job.one"}, havingValue = "true")
public class JobOneScheduler {

    @Scheduled(cron = "*/2 * * * * *")
    public void runJob() {
        log.debug( "Running job one... {}", LocalDateTime.now() );
    }
}


@Slf4j
@Service
@ConditionalOnProperty(prefix = "schedule", name = {"job.two"}, havingValue = "true")
public class JobTwoScheduler {
    @Scheduled(cron = "*/5 * * * * *")
    public void runJob() {
        log.debug( "Running job two... {}", LocalDateTime.now() );
    }
}

application.properties:

schedule.job.one=true
schedule.job.two=false

暫無
暫無

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

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