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;
}
};
}