java 监听器ServletContextListener,服务启动加载及定时器

来源:互联网 发布:国外刻录软件 编辑:程序博客网 时间:2024/05/24 05:23

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

实现方式。


    web.xml中加入配置文件


<!-- 监听器 -->

<listener>

<description>ServletContextListener</description>

<listener-class>com.listener.ContextInitListener</listener-class>

</listener>


   代码实现


package com.listener;


import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Timer;
import java.util.UUID;


import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;


import org.apache.log4j.Logger;
import org.springframework.context.ApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
import org.springframework.web.servlet.i18n.SessionLocaleResolver;
import org.springframework.web.util.WebUtils;


import com.backoffice.action.IndexAction;
import com.bean.ConstantBean;
import com.entity.SysLanguage;
import com.service.impl.IndexService;


/**
 * xujun Application Lifecycle Listener implementation class ContextInitListener
 *
 */


public class ContextInitListener implements ServletContextListener {


//定时器类
private Timer timer = null;


private final Logger logger = Logger.getLogger(ContextInitListener.class);


/**
* Default constructor.
*/
public ContextInitListener() {
// TODO Auto-generated constructor stub
}


/**
* @see ServletContextListener#contextInitialized(ServletContextEvent)
*/
public void contextInitialized(ServletContextEvent arg0) {
try {


timer = new Timer(true);


logger.info("定时器启动");



ApplicationContext context = WebApplicationContextUtils
.getRequiredWebApplicationContext(arg0.getServletContext());


// 定时任务设定
// ,0表示任务无延迟,5*1000表示每隔5秒执行任务,60*60*1000表示一个小时,24*60*60*1000表示一天。
timer.schedule(new categoryTimer(context), 0, 24 * 60 * 60 * 1000);


// 加载多语言(没设定时)
Object obj = context.getBean("indexService");
IndexService usi = (IndexService) obj;


List<SysLanguage> languages = usi.getLanguage();


if (languages != null && languages.size() > 0) {
for (SysLanguage language : languages) {


ConstantBean.zhCache.put(language.getLanguageKey(),
language.getZh());
ConstantBean.myanmarCache.put(language.getLanguageKey(),
language.getMyanmar());


}
}


} catch (Exception e) {


}
}


/**
* @see ServletContextListener#contextDestroyed(ServletContextEvent)
*/
public void contextDestroyed(ServletContextEvent arg0) {
timer.cancel();
arg0.getServletContext().log("定时器销毁");
}


}



定时任务


package com.listener;


import java.util.ArrayList;
import java.util.List;
import java.util.TimerTask;


import net.sf.json.JSONArray;


import org.springframework.context.ApplicationContext;


import com.bean.CategoryInfo;
import com.bean.ConstantBean;
import com.service.impl.CategoryService;


/**
 * 定时加载类目
 * 
 * @author xujun
 */


public class categoryTimer extends TimerTask {


private ApplicationContext context;


public categoryTimer(ApplicationContext context) {
this.context = context;
}


@Override
public void run() {
Object obj = context.getBean("categoryService");
CategoryService categoryService = (CategoryService) obj;


List<CategoryInfo> list = new ArrayList<CategoryInfo>();


try {
list = categoryService.getAllCategory();

JSONArray jsonArray = JSONArray.fromObject(list); 


ConstantBean.CategoryInfos = jsonArray.toString();


} catch (Exception e) {


}


}


}

0 0