场景
SpringBoot中定时任务与异步定时任务的实现:
https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/117083609
上面讲的通过@Scheduled注解实现简单定时任务的方式。
如果定时任务有多个,不同业务场景下需要动态配置某个定时任务的开关。
可以通过@ConditionalOnProperty注解来实现。
@ConditionalOnProperty
@ConditionalOnProperty注解来控制@Configuration是否生效。
把每个定时定位抽离出到单独一个Task类中,将Task类原来的@Component注解改为
@Configuration注解。然后在配置文件中配置对应的定时任务是否执行的表达式,在注解
@ConditionalOnProperty配置对应的配置文件的表达式。
注:
博客:
https://blog.csdn.net/badao_liumang_qizhi
实现
1、配置文件application.yml中添加配置项
task: getPositionData: "50000" getPositionDataEnable: true getSignalData: "50000" getSignalDataEnable: false
2、修改Task类
package com.badao.demo.task; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; @Configuration @EnableScheduling @ConditionalOnProperty(name="task.getPositionDataEnable") public class GetPositionDataTask { @Scheduled(fixedRateString = "${task.getPositionData}") public void getPositionData(){ } }
这里task.getPositionDataEnable为true则配置生效,定时任务执行;为false则配置不生效,定时任务不执行。
这里为true,则此定时任务执行。
同理另一个定时任务类也做同样修改
package com.badao.demo.task; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; @Configuration @EnableScheduling @ConditionalOnProperty(name="task.getSignalDataEnable") public class GetSignalDataTask { @Scheduled(fixedRateString = "${task.getSignalData}") public void getSignalData(){ } }
则该定时任务不执行。
标签:Scheduled,task,SpringBoot,配置文件,ConditionalOnProperty,springframework,org,import, From: https://www.cnblogs.com/badaoliumangqizhi/p/17431686.html