spring里可以做两种方式的定时任务:
1. spring 自带的 定时任务 实现
@EnableScheduling , @Scheduled
两个注解便可以 开启一个定时 任务(当然,类上面要 声明 @Configuration注解)
cron表达式 每分钟的 30秒执行一次.
关于 @Scheduled 支持的配置,请进入源码查看,简单明了。
另外你可能想自己指定线程池,那么你只需要实现SchedulingConfigurer接口。
通过 注册机 自定义配置,如下:
2. 集成Quartz
spring 或 springboot集成Quartz那是相当简单
首先是依赖:
springboot依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
spring依赖:(不写pom了)
其次是代码:
再者, 需要搞清楚Quartz里面的三个角色:
scheduler (SchedulerFactoryBean) 调度器
-> trigger (SimpleTriggerFactoryBean或CronTriggerFactoryBean) 触发器
-> job (JobDetailFactoryBean或MethodInvokingJobDetailFactoryBean). 执行器
如果是springboot,你可以实现 SchedulerFactoryBeanCustomizer 接口去初始化 SchedulerFactoryBean。
3. cron表达式
spring自带的定时任务 支持 Cron表达式,参见(org.springframework.scheduling.support.CronSequenceGenerator)
quartz的Cron表达式。
两者是有一些区别的,Spring的不支持?号,还要注意区分 * 号的使用,解析规则是不同的,详细请自行查阅官档。