定时任务 :
定时任务是企业开发中常见的工作 ,
定时任务技术 :Quartz
- 工作(Job) : 用于定义具体执行的工作
- 工作明细 (JobDetail) : 用于描述定时工作相关的信息
- 触发器 (Trigger) : 用于描述触发工作的规则 , 通常使用cron表达式定义调度规则
- 调度器 (Scheduler) : 描述了工作明细与触发器的对应关系
使用Quartz:
-
导入坐标:
-
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-quartz</artifactId> </dependency>
-
编写java类指定执行什么操作 :
-
MyQuartz.java
-
public class MyQuartz extends QuartzJobBean { @Override protected void executeInternal(JobExecutionContext context) throws JobExecutionException { System.out.println("MyQuartz is Runing..."); } }
-
编写配置类 :
-
@Configuration public class QuartzConfig { @Bean public JobDetail printJobDetail(){ //绑定具体的工作 //storeDurably()持久化 , 因为一旦创建之后 , 不使用 , 就会被垃圾回收掉 //在newJob中要指定具体方法的类 return JobBuilder.newJob(MyQuartz.class).storeDurably().build(); }; @Bean public Trigger trigger(){ //绑定对应的工作明细 CronScheduleBuilder cronschedBuilder = CronScheduleBuilder.cronSchedule(" 0/5 * * * * ?"); //六位分别代表 : 秒 , 分 , 时 , 日 , 月 , 星期 , 一般日和星期 , 只用设置一个即可 , 另一个用?表示 , 这些字段也可以设置为 * , 表示为任意时间 //创建触发器 return TriggerBuilder.newTrigger().forJob(printJobDetail()).withSchedule(cronschedBuilder).build(); } }
SpringBoot整合 Task:
-
在主配置类上加一个注解 , 打开定时任务的开关
-
//开启定时任务功能 @EnableScheduling
-
在想进行定时任务的方法添加时间
-
@Component //注意要是一个Bean public class MyBean { @Scheduled(cron = "0/1 * * * * ?") public void print(){ System.out.println("print task Runing..."); } }
-
yml文件中进行配置
-
spring: task: scheduling: #任务调度线程池的大小 , 默认为1 pool: size: 1 #调度线程名称前缀 , 默认scheduling- thread-name-prefix: ssm- shutdown: #线程池关闭时等待所有任务完成 await-termination: false #调度线程关闭前最大等待时间 , 确保最后一定关闭 await-termination-period: 10s