一、配置定時器表達式
在配置文件添加以下配置
cron:
# 每分鐘一次
# zlxf: 0 0/1 * * * ?
zlxf: 0/10 * * * * ?
注入配置屬性
@Configuration
@ConfigurationProperties(prefix = "cron")
public class CronConfiguration {
private String zlxf;
public String getZlxf() {
return zlxf;
}
public void setZlxf(String zlxf) {
this.zlxf = zlxf;
}
}
二、定時器開啓關閉接口
@Api(tags ="定時任務")
@RestController
@RequestMapping("/quartz/task")
public class DynamicTaskController extends BaseController {
private Logger log = LoggerFactory.getLogger(this.getClass());
@Autowired
private CronConfiguration cronConfiguration;
@Autowired
private ThreadPoolTaskScheduler threadPoolTaskScheduler;
private ScheduledFuture<?> future1;
@Bean
public ThreadPoolTaskScheduler threadPoolTaskScheduler() {
return new ThreadPoolTaskScheduler();
}
@PostMapping("/startZlxf")
@ApiOperation("開始定時任務---指令下達任務啓動")
public ResponseStatus startZlxf()throws Exception {
System.out.println("------------指令下達任務啓動-------------");
try {
future1 = threadPoolTaskScheduler.schedule(new ZlxfRunnable(),new Trigger(){
@Override
public Date nextExecutionTime(TriggerContext triggerContext){
return new CronTrigger(cronConfiguration.getZlxf()).nextExecutionTime(triggerContext);
}
});
return setUrl(ResponseStatus.ok());
}
catch (Exception e) {
log.error("系統異常:{}", e.getMessage());
return setUrl(ResponseStatus.otherError(e.toString()));
}
}
@PostMapping("/stopZlxf")
@ApiOperation("關閉定時任務---指令下達任務關閉")
public ResponseStatus stopZlxf()throws Exception {
try {
if (future1 != null) {
future1.cancel(true);
}
System.out.println("------------指令下達任務關閉-------------");
return setUrl(ResponseStatus.ok());
}catch (Exception e){
return setUrl(ResponseStatus.otherError(e.toString()));
}
}
}
三、創建線程類
創建線程類並上下文注入
public class ZlxfRunnable implements Runnable{
private ZlxfService zlxfService = FrameSpringBeanUtil.getBean(ZlxfService.class);
@Override
public void run() {
try {
System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
List<ZlxfVo> zlxfVoList = zlxfService.getBySendStatus(0); //未發送
System.out.println(zlxfVoList.size());
} catch (Exception e) {
e.printStackTrace();
}
}
}
四、加入上下文注入類
public class FrameSpringBeanUtil implements ApplicationContextAware {
private static ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
@SuppressWarnings("unchecked")
public static <T> T getBean(String name){
return (T) applicationContext.getBean(name);
}
public static <T> T getBean(Class<T> cls){
return applicationContext.getBean(cls);
}
}
在啓動類加入配置
@SpringBootApplication
@RestController
@RequestMapping("/")
@EnableTransactionManagement
public class SzywServerApplication {
public static void main(String[] args) {
SpringApplication.run(SzywServerApplication.class,args);
}
@Bean
public FrameSpringBeanUtil frameSpringBeanUtil(){
return new FrameSpringBeanUtil();
}
}