Spring+hibernate定义两个定时器在同一时间重复执行两次,是因为使用了两个定时器导致线程紊乱了吗?在Web程序启动的时候会同时执行两个定时器
public void onApplicationEvent(ContextRefreshedEvent arg0) {
TimerTask task =new TimerTask(){
@Override
public void run() {
//定时内容 }
}
两个定时器都是这样写的,现在出现这样的问题
另外还想知道,一个Application如何加载多个定时任务
刚刚试了,写到一个OnApplicationEvent(){}中解决不了问题,Spring监听器ApplicationListener执行了3遍
public void onApplicationEvent(ContextRefreshedEvent event) {
if(event.getSource() instanceof XmlWebApplicationContext){
if(((XmlWebApplicationContext)event.getSource()).getDisplayName().equals("Root WebApplicationContext")){
//TimerTask
}}}catch(Exception e){
log4j.error("((XmlWebApplicationContext) applicationEvent.getSource()).getDisplayName() 执行失败,请检查Spring版本是否支持");
这里对问题进行一下说明:
在一个类里面实现了 ApplicationListener 接口,用于在初始化完成后做定时任务TimerTask,但是通过log4j打印日志,发现它执行了3次,其中一次是Spring 框架初始化时执行,另外两次是在项目启动成功后,加载Spring-MVC时执行的。
通过打 breakpoint看到,这两次执行中,onApplicationEvent(ContextRefreshdEvent event)方法中的 event对象值不同,第一次是 Root WebApplicationContext , 据此可以根据对象值来告诉定时器只执行一次即可