开发中遇到一个需求需要定时器实现,按照文档配置好Spring定时器,时间定到某个点重启Tomcat等待时间,等时间到了发现定时器未能执行,启动Tomcat过程中也没有发现错误
打开JDK1.6自带的故障检测工具,先监听到APP占用的JVM进程号,点击Heap dump 按钮后生产heap dump文件,搜索Spring定时器的类,发现已经加载到内存中,但是没有初始化(没有创建实例),重新审查XML文件,发现有一个属性叫做default-lazy-init=true,顿时恍然大悟,原来加上这个属性当应用服务器启动时,Spring只是负责将这些类加载到JVM中,并没有初始化这些类,将这个属性改为false后,发现启动时间也延长了2S以上,定时器的功能也可以运行。
打开JDK1.6自带的故障检测工具,先监听到APP占用的JVM进程号,点击Heap dump 按钮后生产heap dump文件,搜索Spring定时器的类,发现已经加载到内存中,但是没有初始化(没有创建实例),重新审查XML文件,发现有一个属性叫做default-lazy-init=true,顿时恍然大悟,原来加上这个属性当应用服务器启动时,Spring只是负责将这些类加载到JVM中,并没有初始化这些类,将这个属性改为false后,发现启动时间也延长了2S以上,定时器的功能也可以运行。