[备忘] 如何让一段代码在 tomcat 启动时就被运行?
2013-04-01 22:12
239 查看
理论上来说,要实现 “如何让一段代码在 tomcat 启动时就被运行” 有很多种方法,我所知道的有两种: 1. 在 web.xml 里面配置为 listener ; 2. 配置为 Spring 的 bean 。今天因为有同班同学问了这个问题,所以就总结了这两种方法 o(∩_∩)o
如上代码片段配置了一个 listener , 该 listener 中有一个 static 代码块:
由于定义为 listener ,所以在 tomcat 启动时就会初始化,初始化时 static 代码块会被执行,于是就达到了我们需要的效果:
![](http://images.cnitblog.com/blog/483462/201304/01215028-8fae41fc8f2d4d638c151f7cded5960e.jpg)
从图中可以看出在 Server 完成启动前,我们的代码就执行了,也就实现了“让一段代码在 tomcat 启动时就被运行”。
上面是项目中 HiReportService 的配置,为了测试,我在相应的 HiReportServiceImpl 类中加入了一段 static 代码:
最终的运行结果如下:
![](http://images.cnitblog.com/blog/483462/201304/01220305-e7e9c6fcc9274a4db5e2e89f96b737e0.jpg)
也是顺利实现了“让一段代码在 tomcat 启动时就被运行”。
如果有问题或更好的方法,欢迎留言提出和交流,谢谢 o(∩_∩)o
1. 在 web.xml 里面配置为 listener
<listener> <listener-class>com.pandaroid.uniqueonline.UniqueOnlineSessionListener</listener-class> </listener>
如上代码片段配置了一个 listener , 该 listener 中有一个 static 代码块:
public class UniqueOnlineSessionListener implements HttpSessionListener { static { System.out.println("haha static"); } @Override public void sessionCreated(HttpSessionEvent arg0) { } @Override public void sessionDestroyed(HttpSessionEvent arg0) { UniqueOnlineRecords.removeUser(arg0.getSession()); } }
由于定义为 listener ,所以在 tomcat 启动时就会初始化,初始化时 static 代码块会被执行,于是就达到了我们需要的效果:
![](http://images.cnitblog.com/blog/483462/201304/01215028-8fae41fc8f2d4d638c151f7cded5960e.jpg)
从图中可以看出在 Server 完成启动前,我们的代码就执行了,也就实现了“让一段代码在 tomcat 启动时就被运行”。
2. 配置为 Spring 的 bean
这种方式在读某学长的代码时看到,于是学了过来。特别要注意的是:使用这种方式时,bean 的 scope 必须设为默认的 singleton 。因为只有这样,Spring 才会在应用服务器启动时为我们加载相应的 bean 。<bean id="HiReportService" class="com.pandaroid.hiReport.service.HiReportServiceImpl"> <property name="fileUploadDiskPath" ref="fileupload.disk.path"/> <property name="fileUploadHttpPath" ref="fileupload.http.path"/> <property name="jasperService" ref="JasperService"/> </bean>
上面是项目中 HiReportService 的配置,为了测试,我在相应的 HiReportServiceImpl 类中加入了一段 static 代码:
public class HiReportServiceImpl implements HiReportService { static { System.out.println("Spring bean static !"); } ... }
最终的运行结果如下:
![](http://images.cnitblog.com/blog/483462/201304/01220305-e7e9c6fcc9274a4db5e2e89f96b737e0.jpg)
也是顺利实现了“让一段代码在 tomcat 启动时就被运行”。
3. 总结
问题的关键在于:让 tomcat 启动时加载我们的类,加载了,那么必然会运行其中的 static 代码块;那么如何让我们的类在 tomcat 启动时被加载?使用上述两种方法即可 o(∩_∩)o如果有问题或更好的方法,欢迎留言提出和交流,谢谢 o(∩_∩)o
相关文章推荐
- 如何让一段代码tomcat启动就运行
- 如何让一段代码在 tomcat 启动时就被运行?
- 实现tomcat启动时自动运行代码
- 实现tomcat启动时自动运行代码
- Idea在Mac上如何同时启动多个tomcat运行多个web项目
- tomcat启动时自动运行代码
- tomcat启动时自动运行代码
- tomcat启动时自动运行代码
- 如何在每个页面加载之前运行一段java代码
- tomcat启动与停止时自动运行代码
- tomcat启动时自动运行代码
- 如何实现在myeclipse和eclipse中,修改代码后实现自动加载,不用频繁的手动启动tomcat
- ADF11g-029:如何在每个页面加载之前运行一段java代码
- 如何基于nand flash启动Linux内核(分享一段实用、简单、类似bootloader功能的代码)
- 实现tomcat启动时自动运行代码的方法
- LINUX下如何查看tomcat运行状态,判断其是否启动
- 实现tomcat启动时自动运行代码
- Tomcat是如何启动及运行—对tomcat的源码解析
- 如何用ant来启动和停止tomcat以运行web项目
- maven项目如何启动运行---发布到tomcat中