sue.spring.quartz.cron=*/5 * * * * ?
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-quartz</artifactId> </dependency>
package com.luke.demo.schedule; import org.quartz.*; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class QuartzConfig { @Value("${sue.spring.quartz.cron}") private String testCron; /** * 创建定时任务 */ @Bean public JobDetail quartzTestDetail() { JobDetail jobDetail = JobBuilder.newJob(QuartzTestJob.class) //添加认证信息 .withIdentity("quartzTestDetail", "QUARTZ_TEST") .build(); return jobDetail; } /** * 创建触发器 */ @Bean public Trigger quartzTestJobTrigger() { //执行频率 CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(testCron); //创建触发器 Trigger trigger = TriggerBuilder.newTrigger() .forJob(quartzTestDetail()) //添加认证信息 .withIdentity("quartzTestJobTrigger", "QUARTZ_TEST_JOB_TRIGGER") //添加执行规则 .withSchedule(cronScheduleBuilder) .build(); return trigger; } }
這裡的QuartzTestJob如下,方法executeInternal裡就是需要定時執行的任務。
public class QuartzTestJob extends QuartzJobBean { @Override protected void executeInternal(JobExecutionContext context) throws JobExecutionException { System.out.println("现在是"+ new Date()); } }
當專案啟動起來之後,就會依照設定的頻率輸出如下:
#當然也可以啟動定時任務查詢三方的回傳結果,之前做車抵貸業務的風控系統的時候,請求了三方的數據,主動請求然後定時任務輪詢結果。
現在看來,用訊息佇列實作也是很每秒,延時訊息剛好可以滿足這個業務需求,請求資料然後向訊息佇列中放入一個延時訊息,時間到了,去請求結果,若是沒好,就再往訊息佇列放入延時訊息。這樣相對於定時任務的好處是,避免了CPU空轉,提升了效能。
以上是Java怎麼使用quartz實作定時任務的詳細內容。更多資訊請關注PHP中文網其他相關文章!