1.項目基礎
項目是基於Spring Boot2.x版本的
2.添加依賴
<!-- quartz依賴 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-quartz</artifactId> </dependency>
3.yml配置
application-quartz.yml的配置內容如下
spring: quartz: #相關屬性配置 properties: org: quartz: scheduler: instanceName: clusteredScheduler instanceId: AUTO jobStore: class: org.quartz.impl.jdbcjobstore.JobStoreTX driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate tablePrefix: QRTZ_ isClustered: true clusterCheckinInterval: 10000 useProperties: false threadPool: class: org.quartz.simpl.SimpleThreadPool threadCount: 10 threadPriority: 5 threadsInheritContextClassLoaderOfInitializingThread: true #數據庫方式 job-store-type: jdbc #初始化表結構 #jdbc: #initialize-schema: never
4.創建任務測試類
- 簡單任務
代碼如下:
public class MyJob extends QuartzJobBean { @Override protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException { System.out.println("start My Job:" + LocalDateTime.now()); try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("end My Job:" + LocalDateTime.now()); } }
CRON任務
public class MyCronJob extends QuartzJobBean { @Autowired IndexController indexController; @Override protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException { System.out.println("任務執行了" + new Date()); // indexController.testMail(); } }
5.Java配置(QuartzConfiguration)
@Configuration public class QuartzConfiguration { // 使用jobDetail包裝job @Bean public JobDetail myJobDetail() { return JobBuilder.newJob(MyJob.class).withIdentity("myJob").storeDurably().build(); } // 把jobDetail注冊到trigger上去 @Bean public Trigger myJobTrigger() { SimpleScheduleBuilder scheduleBuilder = SimpleScheduleBuilder.simpleSchedule() .withIntervalInSeconds(15).repeatForever(); return TriggerBuilder.newTrigger() .forJob(myJobDetail()) .withIdentity("myJobTrigger") .withSchedule(scheduleBuilder) .build(); } // 使用jobDetail包裝job @Bean public JobDetail myCronJobDetail() { return JobBuilder.newJob(MyCronJob.class).withIdentity("myCronJob").storeDurably().build(); } // 把jobDetail注冊到Cron表達式的trigger上去 @Bean public Trigger CronJobTrigger() { CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule("0/10 * * * * ?"); return TriggerBuilder.newTrigger() .forJob(myCronJobDetail()) .withIdentity("myCronJobTrigger") .withSchedule(cronScheduleBuilder) .build(); } }
其實上面的配置就等價於在傳統的xml中配置bean是一樣的。
6.啟動測試
至此,SpringBoot集成Quartz的完畢。
四、總結
- Spring Boot集成quartz還是比較簡單的。
- 其實還有更高級的用法,就是前台動態創建和控制定時任務,后面有時間再完善。大家先把這種最簡單的基本用法熟練掌握。