web应用中一些放在内存里面带来方便操作

来源:互联网 发布:淘宝女装旗袍 编辑:程序博客网 时间:2024/06/05 13:30

如题:大家都知道放在常量池里的东西花的代价大,所以好多不用放在里面。总有一些需求需要放在里面。

各种web服务器启动都会初始化很多参数、对象。

乱了,好久不记笔记啦。今天用了一些觉得对最近以后有温习东西,比如:读配置文件,可配置。文件上传、下载路径,域名、全局参数、常用请求,数据库定义,邮件服务器设置,短信服务器设置等。

一个监听者+timer.schedule()的定时器。schedule(TimerTask task, long delay, long period)  安排指定的任务从指定的延迟后开始进行重复的固定延迟执行

与spring提供的定时器灵活,想停就停,想开就开。却花了不少代价。

package com.officeFrame.web.listener;import java.io.IOException;import java.net.URL;import java.util.ArrayList;import java.util.List;import java.util.Timer;import javax.servlet.ServletContextEvent;import javax.servlet.ServletContextListener;import javax.servlet.http.HttpServlet;import org.apache.commons.digester.Digester;import org.xml.sax.SAXException;import com.officeFrame.model.TaskBean;import com.officeFrame.model.Tasking;import com.officeFrame.utils.Loader;@SuppressWarnings("unchecked")public class OfficeTask extends HttpServlet implements ServletContextListener{/** *  */private static final long serialVersionUID = 9077777654593863564L;private Timer timer = null; //private static final Logger logger = Logger.getLogger(OfficeTask.class);private static List stopTaskNameList;//被停止的服务的名称//关闭某个服务public  static void stopTask(String taskName){if (stopTaskNameList==null){stopTaskNameList=new ArrayList();stopTaskNameList.add(taskName);}else{boolean in=false;for (int i=0;i<stopTaskNameList.size();i++){String myTaskName=(String) stopTaskNameList.get(i); if (myTaskName.equals(taskName)){in=true;break;}}if (in==false)stopTaskNameList.add(taskName);}}//将关闭的服务启动起来public  static void startTask(String taskName){if (stopTaskNameList!=null){for (int i=0;i<stopTaskNameList.size();i++){String myTaskName=(String) stopTaskNameList.get(i); if (myTaskName.equals(taskName))stopTaskNameList.remove(i);}}}//判断服务是否被停了public static boolean isBeStoped(String taskName){boolean stop=false;if (stopTaskNameList!=null){for (int i=0;i<stopTaskNameList.size();i++){String myTaskName=(String) stopTaskNameList.get(i); if (myTaskName.equals(taskName)){stop=true;break;}}}return stop;}    public void contextInitialized(ServletContextEvent event)     {     //定时任务管理     timer = new Timer(true);    List ls=beginTaskOfConfigXML();    for (int i=0;i<ls.size();i++)    {    TaskBean taskBean=(TaskBean) ls.get(i);    if (taskBean.isRun()==true)    {    if (taskBean.getInterval()>0)    {    //安排指定的任务从指定的延迟后开始进行重复的固定延迟执行。    timer.schedule(new Tasking(event.getServletContext(),taskBean), 0, taskBean.getInterval()*1000);    }    }    }    }     public void contextDestroyed(ServletContextEvent event) {         timer.cancel();     }public void load(){;}private List beginTaskOfConfigXML(){List retList=new ArrayList();Digester digester = new Digester();URL url = Loader.getResource("SysConfig.xml");        digester.addObjectCreate("System/tasks", ArrayList.class);        digester.addObjectCreate("System/tasks/task",TaskBean.class);        digester.addSetProperties("System/tasks/task");        digester.addSetNext("System/tasks/task", "add");                try {retList = (ArrayList) digester.parse(url.openStream());} catch (IOException e) {e.printStackTrace();} catch (SAXException e) {e.printStackTrace();}return retList;}}


 

用到org.apache.commons.digester.Digester解析xml转java对象

 

xml中
<listener><listener-class>com.officeFrame.web.listener.OfficeTask</listener-class></listener>


 后续

 

原创粉丝点击