如何在Java Servlet上下文中获取和设置全局对象
我想知道是否有人可以建议:我有一种情况,即Quartz运行的计划作业将每小时更新对象的数组列表。
但是我需要此对象数组列表对Tomcat创建的所有会话可见。所以我在想,我每小时都会在运行的Quartz作业中的某个地方编写该对象,以便每个会话都可以访问它。
谁能说这可以最好地实现?我想知道从Quartz作业将对象写入servlet上下文吗?另一种选择是让每个会话从数据库表中填充对象的数组列表。
谢谢
摩根先生。
回答:
是的,我会将列表存储ServletContext
为应用程序范围的属性。相反,从数据库中提取数据的效率可能较低,因为您仅每小时更新一次列表。ServletContextListener
为了使Quartz任务可以引用该ServletContext
对象,可能必须创建一个。将ServletContext
只能从JavaEE的相关类,如Servlet和侦听器检索。
编辑:在ServletContextListener中,当您创建作业时,可以通过将列表添加到JobDataMap将其传递到作业中。
public class MyServletContextListener implements ServletContextListener{ public void contextInitialized(ServletContextEvent event){
ArrayList list = new ArrayList();
//add to ServletContext
event.getServletContext().setAttribute("list", list);
JobDataMap map = new JobDataMap();
map.put("list", list);
JobDetail job = new JobDetail(..., MyJob.class);
job.setJobDataMap(map);
//execute job
}
public void contextDestroyed(ServletContextEvent event){}
}
//Quartz job
public class MyJob implements Job{
public void execute(JobExecutionContext context){
ArrayList list = (ArrayList)context.getMergedJobDataMap().get("list");
//...
}
}
以上是 如何在Java Servlet上下文中获取和设置全局对象 的全部内容, 来源链接: utcz.com/qa/409019.html