如何在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

回到顶部