微服務之springboot集成定時任務

一、Quartz實現定時任務

1、引入依賴

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-quartz</artifactId>
</dependency>

2、application.yml 增加配置

org:
  quartz:
    trigger_key_name: job_trigger
    job_group: job_group
    cron_time: 0/5 * * * * ?

3、新建配置類

@Configuration
public class QuartzConfig {

    @Value("${org.quartz.trigger_key_name}")
    private String TRIGGER_KEY_NAME;
    @Value("${org.quartz.job_group}")
    private String JOB_GROUP;
    @Value("${org.quartz.cron_time}")
    private String CRON_TIME;

    @Autowired
    Scheduler scheduler;

    public void startJob() throws SchedulerException{
        //首先是通過 JobBuilder 創建JobDetail實例,QuartzJob 必須是實現了 Job 接口的實例
        JobDetail jobDetail = JobBuilder.newJob(QuartzJob.class).withIdentity(TRIGGER_KEY_NAME,JOB_GROUP).build();
        //構建觸發器
        CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(CRON_TIME);
        CronTrigger cronTrigger = TriggerBuilder.newTrigger()
                                    .withIdentity(TRIGGER_KEY_NAME, JOB_GROUP)
                                    .withSchedule(cronScheduleBuilder).build();
        //將任務和觸發器綁定到調度器
        scheduler.scheduleJob(jobDetail,cronTrigger);
        scheduler.start();
    }

}

4、新增Job任務類,必須實現 quartz 的Job接口

public class QuartzJob implements Job {
    private final Logger logger = LoggerFactory.getLogger(this.getClass());

    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        logger.info("==== 定時任務 =====");
    }
}

5、控制器調用測試一下效果

@RequestMapping("/index")
    public String index(){
        try {
            quartzConfig.startJob();
        } catch (SchedulerException e) {
            e.printStackTrace();
        }
        return "index:content";
    }

  

二、SpringTask實現定時任務

1、不需要引入依賴,直接在項目啓動類增加註解

//啓用自帶定時任務
@EnableScheduling
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

2、定時任務(注:定時任務的類不能是抽象類,如果非要則需要有子類繼承)

@Component
public class OrderTimeOutCancelTask {
    /**
     * 每10分鐘掃描一次,掃描設定超時時間之前下的訂單,如果沒支付則取消該訂單
     */
    @Scheduled(cron = "0 0/10 * ? * ?")
    private void cancelTimeOutOrder() {
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章