关于tomcat启动完自动执行的问题,初始化问题,加载两次问题
来源:互联网 发布:淘宝分销 批量上架 编辑:程序博客网 时间:2024/06/05 20:20
因为项目要求,要创建一个定时器来一段时间监听有没有信息被发布,所以每次都是部署完一个项目之后手动启动定时器,之后发现每次部署都要手动启动,所以决定把它改成随项目启动而启动,一开始百度用的是这两种方法。
注:http://jingyan.baidu.com/article/359911f5518d7457fe0306f9.html
这种方法,这种方法确实可以执行,不过因为我要在这个方法里边用到spring注入的dao,所以,每次运行项目都会报 空指针 异常,所以调试了N遍,以为自己注入的有问题,然后决定试第二种方法;
第二种是这个样子的,就是一个servlet 然后设置了启动顺序,,,这种方法是这个样子,确实也能用,不过它运行了3次,一个定时器启动三次是什么概念,而且又一次启动的的时候居然报了 空指针 ,也是空指针,估计是在WEB.XML里配置的时候启动的时候有问题,而当我把XML的配置注释掉之后,还是会运行2次,不过那两次就没什么问题,不过是同时执行,,其实这个位置我有点不理解的就是,,为什么XML都注释掉它还是会自动运行呢?而且还是两次。
是在tomcat部署出现多少ms前运行的,,注入也没有问题,但是同时运行了两次,这个是不能允许出现的,,同时运行两次,导致的是执行任务的时候也会执行两次,会插入数据库两次,问题很严重,于是也是调试了N次,也没解决。
之后搜了下,可能是因为这些方法可能是在spring容器还没有完成初始化的时候就已经执行了,所以导致的问题就是 空指针,初始化两次网上有写,也不知道对不对,说是tomcat问题,http://www.cnblogs.com/feiguo/p/3779192.html 这个是看着还算比较容易理解的,
解决方法如下:
使用onApplicationEvent这个方法就可以,这个方法会在spring的bean全部初始化之后才会执行,所以就完美解决了没有完全初始化的问题,不过类要实现 ApplicationListener
如下
public class onLoad implements ApplicationListener<ContextRefreshedEvent>{}
然后在实现的这个方法里边写自己的代码
public void onApplicationEvent(ContextRefreshedEvent event) {}
判断的话,因为if(event.getApplicationContext().getParent() == null) 这个方法我可以理解,就是root application context 没有parent 所以照理说只会执行一次,不过这里我这边还是执行了两次,估计是那个所说的tomcat问题,然后试了另一种
if(event.getApplicationContext().getDisplayName().equals("Root WebApplicationContext"))
这种方法就只执行了一次,可能是因为spring里root webapplicationContext 只有一个,
定时器的话是这个样子的
Runnable runnable = new Runnable() {
public void run() {
//代码
}
};
ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
// 第二个参数为首次执行的延时时间,第三个参数为定时执行的间隔时间,单位是s
service.scheduleAtFixedRate(runnable, 30, 60, TimeUnit.SECONDS);
- 关于tomcat启动完自动执行的问题,初始化问题,加载两次问题
- Tomcat启动时项目重复加载,导致资源初始化两次的问题
- Tomcat启动时项目重复加载,导致资源初始化两次的问题
- eclipse中tomcat启动时项目重复加载,导致资源初始化两次的问题
- Tomcat启动时项目重复加载,导致资源初始化两次的问题
- Tomcat 启动两次的问题
- Tomcat 启动两次的问题
- tomcat启动两次的问题
- Tomcat加载两次问题
- Tomcat 启动两次的问题(ServletContextListener的contextInitialized被执行两次的问题)
- Tomcat 启动两次的问题(ServletContextListener的contextInitialized被执行两次的问题)
- Tomcat 启动两次的问题(ServletContextListener的contextInitialized被执行两次的问题)
- Tomcat启动后加载两次servlet的问题
- Tomcat启动后加载两次web.xml的问题
- Tomcat启动后加载两次servlet的问题
- Tomcat启动后加载两次servlet的问题
- Tomcat启动后加载两次servlet的问题
- Tomcat启动后加载两次servlet的问题
- KMP算法的next[]数组通俗解释
- 项目总结
- Java 基础学习IO流之BufferedReader
- TCP Handshake
- Signal QQmlEngine::quit() emitted, but no receivers connected to handle it quit信号无法接收解决方案 Qt5.7
- 关于tomcat启动完自动执行的问题,初始化问题,加载两次问题
- Displaying Bitmaps Efficiently之Managing Bitmap Memory
- Lubuntu 桌面环境变为 LXQt
- 记录第一天
- 加密算法、DES、IDEA、RSA、DSA
- 支持向量机SVM算法原理及应用(R)
- java判断日期是否为工作日(排除节假日和调整周末上班)
- 29. git ignore
- c++ primer 学习(五) 类