java web系统级初始化工作

时间:2021-11-02 14:22:10
  通常我们在做web开发时,有些系统级参数希望在web启动时就进行一次性初始化,供整个工程调用使用。如,系统配置参数等。这时可以采用两种方式:一是定义一个servlet、另一种是使用监听器。


方案一:使用servlet的方式应该不陌生,在web.xml中定义一个servlet,在init方法中把要初始化的东西写到里面;如:

<servlet>
		<servlet-name>initServlet</servlet-name>
		<servlet-class>com.ifeng.crm.common.InitServlet</servlet-class>
		<load-on-startup>1</load-on-startup>
</servlet>
注:不需要写servlet-maping
public class InitServlet extends HttpServlet {
	private static Logger logger = Logger.getLogger(InitServlet.class);


	@Override
	public void init() throws ServletException {
		// TODO Auto-generated method stub
		super.init();
		ServletContext context = super.getServletContext();
		ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(context);
		InitService initService = (InitService)ctx.getBean("initService");
		SyncService syncService = (SyncService)ctx.getBean("syncService");
		
		logger.info("初始化数据开始。。。");
		initService.init();
		logger.info("初始化完成!");
		
		logger.info("启动iams同步服务。。。");
		new Thread(new SyncIamsThread(syncService)).start();
		logger.info("启动iams同步服务完成!");
		
	}
}


方案二:listener:

        ServletContext 被 Servlet 程序用来与 Web 容器通信。每一个 Web 应用程序含有一个Context,被Web应用内的各个程序共享。所以ServletContext 的最大应用是Web缓存----把不经常更改的内容读入内存,所以服务器响应请求的时候就不需要进行慢速的磁盘I/O了。
       ServletContextListener 是 ServletContext 的监听者,如果 ServletContext 发生变化,如服务器启动时 ServletContext 被创建,服务器关闭时 ServletContext 将要被销毁。在JSP文件中,application 是 ServletContext 的实例,由JSP容器默认创建。Servlet 中调用 getServletContext()方法得到 ServletContext 的实例。

       服务器启动时,ServletContextListener 的 contextInitialized()方法被调用,所以在里面创建好缓存。

实例:

1.web.xml

 <listener>
   <listener-class>com.zzcatv.util.projectInit</listener-class>
  </listener>
2.java

public class ProjectInit implements ServletContextListener{
	private static Logger logger = Logger.getLogger(ProjectInit.class);
		
	public void contextDestroyed(ServletContextEvent arg0) {
		logger.info("==========初始化信息进行销毁==========");
	}
	
	public void contextInitialized(ServletContextEvent arg0) {
		logger.info("==========系统初始化==========");
		try {
			ApplicationContext ctx = WebApplicationContextUtils.getRequiredWebApplicationContext(arg0.getServletContext());
			InitService initService = (InitService) ctx.getBean("initServiceImpl");
			initService.init();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}