SpringBoot 使用定時任務動態執行任務


import com.patient.core.adapter.CorsFilter;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.scheduling.annotation.EnableScheduling;

@EnableScheduling//開啟定時任務注解
@SpringBootApplication
@MapperScan("com.patient.core.mapper")
public class PatientSystemApplication {

    public static void main(String[] args) {
        SpringApplication.run(PatientSystemApplication.class, args);
    }

    @Bean
    public FilterRegistrationBean setFilter() {
        FilterRegistrationBean filterBean = new FilterRegistrationBean();
        filterBean.setFilter(new CorsFilter());
        filterBean.setName("CorsFilter");
        filterBean.addUrlPatterns("/*");
        return filterBean;
    }
}

  

import com.patient.core.service.UserService;
import com.patient.core.util.DateUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.Trigger;
import org.springframework.scheduling.TriggerContext;
import org.springframework.scheduling.annotation.SchedulingConfigurer;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;
import org.springframework.scheduling.support.CronTrigger;

import java.util.Date;


@Configuration
public class ReminderTask implements SchedulingConfigurer {
    private static Logger log = LoggerFactory.getLogger(ReminderTask.class);

    @Autowired
    private UserService userService;

  
//項目啟動會自動執行該Controller 類,首先執行觸發器的方法,查詢要執行業務邏輯的時間(需要轉換成Cron表達式),動態的執行業務邏輯,業務邏輯執行完畢會再次執行觸發器 設定下次執行時間
@Override public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) { scheduledTaskRegistrar.addTriggerTask(doTask(), getTrigger()); } // 業務執行方法 private Runnable doTask() { return new Runnable() { @Override public void run() { try { //業務邏輯 log.info("業務執行方法"); } catch (Exception e) { e.printStackTrace(); } } }; } //業務觸發器 private Trigger getTrigger() { return new Trigger() { @Override public Date nextExecutionTime(TriggerContext triggerContext) { String dateStr = userService.getLastTime(); if ("".equals(dateStr) || dateStr == null) return null; String cron = DateUtils.getCron(DateUtils.strToDateLong(dateStr)); //定時任務觸發,可修改定時任務的執行周期 CronTrigger trigger = new CronTrigger(cron); Date nextExecDate = trigger.nextExecutionTime(triggerContext); log.info("業務觸發器:"+DateUtils.dateToStrLong(nextExecDate)); return nextExecDate; } }; }

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM