轉載自https://blog.csdn.net/wk52525/article/details/79100973
1 maven依賴
<dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.2.1</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency>
2 創建第一個任務
package top.kylewang.bos.quartz; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.stereotype.Component; @Component @EnableScheduling public class FirstJob{ public void task(){ System.out.println("任務1執行...."); } }
創建第二個任務
package top.kylewang.bos.quartz; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.stereotype.Component; @Component @EnableScheduling public class SecondJob{ public void task(){ System.out.println("任務2執行...."); } }
3創建觸發器和開啟任務
package top.kylewang.quartz; import org.quartz.JobDetail; import org.quartz.Trigger; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean; import org.springframework.scheduling.quartz.SchedulerFactoryBean; import org.springframework.scheduling.quartz.SimpleTriggerFactoryBean; import org.springframework.scheduling.quartz.CornTriggerFactoryBean; import top.kylewang.bos.quartz.FirstJob ; import top.kylewang.bos.quartz.SecondJob; @Configuration public class QuartzConfiguration { // 配置定時任務1 @Bean(name = "firstJobDetail") public MethodInvokingJobDetailFactoryBean firstJobDetail(FirstJob firstJob) { MethodInvokingJobDetailFactoryBean jobDetail = new MethodInvokingJobDetailFactoryBean(); // 是否並發執行 jobDetail.setConcurrent(false); // 為需要執行的實體類對應的對象 jobDetail.setTargetObject(firstJob); // 需要執行的方法 jobDetail.setTargetMethod("task"); return jobDetail; } // 配置觸發器1 @Bean(name = "firstTrigger") public SimpleTriggerFactoryBean firstTrigger(JobDetail firstJobDetail) { SimpleTriggerFactoryBean trigger = new SimpleTriggerFactoryBean(); trigger.setJobDetail(firstJobDetail); // 設置任務啟動延遲 trigger.setStartDelay(0); // 每5秒執行一次 trigger.setRepeatInterval(5000); return trigger; } // 配置定時任務2 @Bean(name = "secondJobDetail") public MethodInvokingJobDetailFactoryBean secondJobDetail(SecondJob secondJob) { MethodInvokingJobDetailFactoryBean jobDetail = new MethodInvokingJobDetailFactoryBean(); // 是否並發執行 jobDetail.setConcurrent(false); // 為需要執行的實體類對應的對象 jobDetail.setTargetObject(secondJob); // 需要執行的方法 jobDetail.setTargetMethod("task"); return jobDetail; } // 配置觸發器2 @Bean(name = "secondTrigger") public CronTriggerFactoryBean secondTrigger(JobDetail secondJobDetail) { CronTriggerFactoryBean trigger = new CronTriggerFactoryBean(); trigger.setJobDetail(secondJobDetail.getObject()); // cron表達式 trigger.setCronExpression("0 30 20 * * ?"); return trigger; } // 配置Scheduler @Bean(name = "scheduler") public SchedulerFactoryBean schedulerFactory(Trigger firstTrigger, Trigger secondTrigger) { SchedulerFactoryBean bean = new SchedulerFactoryBean(); // 延時啟動,應用啟動1秒后 bean.setStartupDelay(1); // 注冊觸發器 bean.setTriggers(firstTrigger,secondTrigger); return bean; } }