Quartz定时器的应用
Spring中使用Quartz的3种方法(MethodInvokingJobDetailFactoryBean,implements Job,extends QuartzJobBean)
后两种方法比较简单易懂,我们介绍第一种MethodInvokingJobDetailFactoryBean的使用
一般spring中使用MethodInvokingJobDetailFactoryBean是配置在xml中的,这里介绍一下在springcloud中的简单实用
1、首先,在pom.xml中添加Quartz的依赖
<dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> </dependency>
2、添加一个被调度的实现类,里面有需要执行的定时方法
@Component
public class QuartzTest {
public void test(){
String s = "my name is zhongguo";
Date date = new Date();
System.out.println("定时任务--每5秒启动一次,现在时间"+date +"输出:"+s);
}
}
3、添加Quartz定时配置
@Configuration public class QuartzConfig { private String time = "*/5 * * * * ? "; //配置定时任务 @Bean(name = "quartzTestJobDetail") MethodInvokingJobDetailFactoryBean configTask(QuartzTest quartzTest){ MethodInvokingJobDetailFactoryBean jobDetailFactoryBean = new MethodInvokingJobDetailFactoryBean(); jobDetailFactoryBean.setConcurrent(false);// 是否并发执行 jobDetailFactoryBean.setTargetObject(quartzTest);// 为需要执行的实体类对应的对象 jobDetailFactoryBean.setTargetMethod("test"); // 需要执行的方法 return jobDetailFactoryBean; } //配置触发器 @Bean(name = "quartzTestJobTrigger") CronTriggerFactoryBean configTrigger(@Qualifier("quartzTestJobDetail") MethodInvokingJobDetailFactoryBean quartzTestJobDetail){ CronTriggerFactoryBean triggerFactoryBean = new CronTriggerFactoryBean(); triggerFactoryBean.setJobDetail(quartzTestJobDetail.getObject()); triggerFactoryBean.setCronExpression(time);// cron表达式 return triggerFactoryBean; } @Bean(name = "quartzTestTrigger") CronTrigger quartzTestTrigger(@Qualifier("quartzTestJobTrigger")CronTriggerFactoryBean quartzTestTrigger ){ return quartzTestTrigger.getObject(); } //配置Scheduler @Bean(name = "scheduler") SchedulerFactoryBean schedulerFactory( @Qualifier("quartzTestTrigger") Trigger quartzTestTrigger){ SchedulerFactoryBean bean = new SchedulerFactoryBean(); bean.setStartupDelay(1);// 延时启动,应用启动1秒后 bean.setAutoStartup(true); bean.setTriggers(quartzTestTrigger);// 注册触发器 return bean; } }
4、启动springcloud项目测试,结果显示:定时任务正确✔