最近一个需求,需要在项目中加定时任务功能,但有时候又不想让该任务执行
一开始想的是设置cron,让时间无限大,但是不太合理,最终 ,找到了通过配置注解的方式实现该功能
若需要开启定时任务,则做以下配置;否则,去掉配置就好了
在application文件中 ,配置cron
schedul:
cron: 0/6 * * * * ? #这里配置的是定时表达式,方便直接使用
在定时任务代码块中使用@ConditionalOnProperty注解
@Slf4j
@Configuration
@EnableScheduling
/**
* 默认条件注解是开启的,现在采用配置文件的变量来手动控制定时任务是否执行
* matchIfMissing:默认为false,若未进行属性配置,则自动配置不生效;若matchIfMissing为true,则表示如果没有对应的属性配置,则自动配置默认生效。
* havingValue:与name组合使用,比较获取到的属性值与havingValue给定的值是否相同,相同才加载配置
*/
@ConditionalOnProperty(prefix = "schedul", name = "cron")
public class SyncUserAndOrgScheduleConfig implements SchedulingConfigurer{
private static final Logger LOGGER = LoggerFactory.getLogger(SyncUserAndOrgScheduleConfig.class);
@Autowired
private UserInfoOaService userOaService;
@Autowired
private OrganizationOaService orgOaService;
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar){
//代码块
}
//这里直接取配置文件中配置的值
@Scheduled(cron = "${schedul.cron}")
public void syncTask() {
LOGGER.info("同步任务开启");
ScheduledTaskRegistrar taskRegistrar = new ScheduledTaskRegistrar();
this.configureTasks(taskRegistrar);
}
}