在applicationContext.xml中添加:
xmlns:task="/schema/task"
xsi:schemaLocation="/schema/task
/schema/task/spring-task-4.0.xsd">
java代码:
@Componentpublic classCleanExpireTokenTask {private Logger logger =LoggerFactory.getLogger(LogTag.BUSINESS);
@Scheduled(cron= "0 * * * * ?")public voidstartUpdateSaleThread(){try{
System.out.println("check token expire");
}catch(Exception e){
logger.error("Make salesReport faild",e);
}
}
}
注意:
实现类上要加注解@Component
定时器的任务方法不能有返回值
配置及启动报错问题参考自
-11-22日 安全关闭spring定时任务线程池
java代码
@Resource(name = "myScheduler")
private ThreadPoolTaskScheduler threadPoolTaskScheduler;
/**
* 等待正在执行的定时任务执行完毕,不再执行新的定时任务,
*/
public void shutdown(){
threadPoolTaskScheduler.shutdown();
// 等待任务执行完毕
while(threadPoolTaskScheduler.getActiveCount() > 0){
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
注:1.根据测试,通过此方式创建的定时任务,比如每分钟0秒执行任务,如果上一分钟0秒执行的任务还没执行完,则这次任务就不会启动。
2.在ThreadPoolTaskScheduler调用shutdown方法后,不会杀掉正在执行的任务,已启动的定时任务可以执行完,这时如果定时任务执行Thread.sleep方法,会抛InterruptedException,需要注意。
参考自
如果觉得《java 注解scheduler_使用spring的@Scheduled注解执行定时任务 启动项目不输出警告》对你有帮助,请点赞、收藏,并留下你的观点哦!