SpringBoot整合Quartz 注解开发
1.导入依赖
<!-- quratz调度框架--> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.2.1</version> </dependency> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz-jobs</artifactId> <version>2.2.1</version> </dependency>
2.注解开发
配置两个触发器 不同的cron规则执行任务 有一天执行一次的 有5分钟执行一次的
quartz相关配置类
QuartzConfig.java
package com.jjgame.tbc.business.config; import com.jjgame.tbc.business.quartz.JobUtil; import com.jjgame.tbc.business.quartz.JobUtil2; import org.quartz.Trigger; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.quartz.CronTriggerFactoryBean; import org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean; import org.springframework.scheduling.quartz.SchedulerFactoryBean; /** * @program: tbc * @description: 定时任务相关配置类 * @author: lzy * @create: 2018-07-13 16:10 */ @Configuration public class QuartzConfig { @Bean public JobUtil jobUtil() { JobUtil bean = new JobUtil(); return bean; } @Bean public JobUtil2 jobUtil2() { JobUtil2 bean = new JobUtil2(); return bean; } // 配置中设定了 // ① targetMethod: 指定需要定时执行scheduleInfoAction中的simpleJobTest()方法 // ② concurrent:对于相同的JobDetail,当指定多个Trigger时, 很可能第一个job完成之前, // 第二个job就开始了。指定concurrent设为false,多个job不会并发运行,第二个job将不会在第一个job完成之前开始。 // ③ cronExpression:0/10 * * * * ?表示每10秒执行一次,具体可参考附表。 // ④ triggers:通过再添加其他的ref元素可在list中放置多个触发器。 scheduleInfoAction中的simpleJobTest()方法 @Bean(name = "detailFactoryBean") public MethodInvokingJobDetailFactoryBean detailFactoryBean(@Qualifier("jobUtil") Object jobUtil) { MethodInvokingJobDetailFactoryBean bean = new MethodInvokingJobDetailFactoryBean(); bean.setTargetObject(jobUtil); bean.setTargetMethod("test"); bean.setConcurrent(false); return bean; } @Bean(name = "detailFactoryBean2") public MethodInvokingJobDetailFactoryBean detailFactoryBean2(@Qualifier("jobUtil2") Object jobUtil2) { MethodInvokingJobDetailFactoryBean bean = new MethodInvokingJobDetailFactoryBean(); bean.setTargetObject(jobUtil2); bean.setTargetMethod("test"); bean.setConcurrent(false); return bean; } @Bean(name = "cronTriggerBean") public CronTriggerFactoryBean cronTriggerBean(@Qualifier("detailFactoryBean")MethodInvokingJobDetailFactoryBean detailFactoryBean) { CronTriggerFactoryBean tigger = new CronTriggerFactoryBean(); tigger.setJobDetail(detailFactoryBean.getObject()); tigger.setCronExpression("0/5 * * * * ? ");//每5秒执行一次 return tigger; } @Bean(name = "cronTriggerBean2") public CronTriggerFactoryBean cronTriggerBean2(@Qualifier("detailFactoryBean2")MethodInvokingJobDetailFactoryBean detailFactoryBean2) { CronTriggerFactoryBean tigger = new CronTriggerFactoryBean(); tigger.setJobDetail(detailFactoryBean2.getObject()); tigger.setCronExpression("* * * * * ? ");//每5秒执行一次 return tigger; } @Bean public SchedulerFactoryBean schedulerFactory(Trigger[] cronTriggerBean) { SchedulerFactoryBean bean = new SchedulerFactoryBean(); System.err.println(cronTriggerBean[0]); bean.setTriggers(cronTriggerBean); return bean; } }
JobUtil.java 任务类
package com.jjgame.tbc.business.quartz; import org.springframework.stereotype.Service; /** * @program: tbc * @description: 定时任务 任务类 * @author: lzy * @create: 2018-07-13 16:08 */ @Service public class JobUtil { public void test() { System.out.println("定时任务测试"); } }
JobUtil2.java 任务类2
package com.jjgame.tbc.business.quartz; import org.springframework.stereotype.Service; /** * @program: tbc * @description: 定时任务 任务类 * @author: lzy * @create: 2018-07-13 16:08 */ @Service public class JobUtil2 { public void test() { System.out.println("定时任务测试22"); } }
启动结果:一个是5秒一次 一次是一秒一次
Spring自己的定时任务
package com.jjgame.tbc.business.config; import org.apache.commons.lang.time.FastDateFormat; import org.springframework.beans.factory.annotation.Configurable; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.util.Date; /** * @program: tbc * @description: * @author: lzy * @create: 2018-07-13 16:54 */ @Component @Configurable @EnableScheduling public class ScheduleJobs { public final static long SECOND = 1 * 1000; FastDateFormat fdf = FastDateFormat.getInstance("yyyy-MM-dd HH:mm:ss"); @Scheduled(cron = "0/5 * * * * ?") public void cronJob() { System.out.println("[CronJob Execute]"+fdf.format(new Date())); } }
结果:
定时任务测试22
[CronJob Execute]2018-07-13 18:10:25
定时任务测试22
定时任务测试22
定时任务测试22
定时任务测试22
[CronJob Execute]2018-07-13 18:10:30
定时任务测试
具体业务自己在JobUtil中自己实现就行
xml开发:http://gong1208.iteye.com/blog/1773177
quartz学习:https://blog.****.net/u010648555/article/details/54863144