最近项目中一些外部接口需要定时扫描表中数据,定时发送,由于项目框架是springboot的,故首先考虑使用spring内部配置实现定时任务,主要考虑到方便快捷。查看资料也发现可以使用quartz+springboot的形式,由于时间原因,直接使用springboot注解形式来实现。
步骤如下:
1、首先springboot启动类中添加注解:@EnableScheduling ,允许使用定时任务;
2、创建定时任务实现类:
@Component
public class PayJobs {
private static final Logger logger = Logger.getLogger(PayJobs.class);
public final static long ONE_Minute = 60 * 1000;
@Scheduled(cron = "0 0 0/1 * * ?")
public void queryPayStatus() {
logger.info("执行定时任务queryPayStatus---start");
logger.info("执行定时任务queryPayStatus---end");
}
}
按上述方法模板就创建了一个定时任务的执行方法,cron = "0 0 0/1 * * ?"表时一小时执行一次,具体时间可参考cron表达式。
但是问题来了,如果想把执行时间放到配置文件中该怎么弄呢?
首先想到的是下述方式:
@Value("${paramInfo}")
private String paramInfo;
在application.properties中添加配置参数paramInfo,以上述方式获取,但是发现cron表达式获取不到,或者获取到的无法注解到方法头上面;那又该如何解决呢?查资料发现可以采取如下方式:
@Component
@PropertySource(value = {"classpath:/param.properties","file:${user.dir}/config/param.properties"},ignoreResourceNotFound=true)
public class TaacCertDelayTaskJob {
private static final Logger logger = Logger.getLogger(TaacCertDelayTaskJob.class);
@Scheduled(cron = "${cronTaacCertDelayTaskJob}")
private void TaacCertDelay() throws ParseException {
}
}
单独创建一个配置文件param.properties,添加配置参数cronTaacCertDelayTaskJob,然后把配置文件注解到类中(@PropertySource),上述方法中前者注解value值对应的本地,后者对应是linux服务器部署环境对应的配置文件;其实也可以单独去写方法加载上述的配置文件,不需要用注解的方式,但考虑注解方式较为方便,所有采用。
注意:springboot对应的定时任务是串行的,如果复杂并行的定时任务不满足。