不要使用servlet来存储数据.而是将数据存储为.的属性ServletContext.你可以借助a来做到这一点ServletContextListener.借助于,可以使用完全相同的侦听器类以定时间隔重新加载数据ScheduledExecutorService.
这是一个启动示例:
public class Config implements ServletContextListener {
private ScheduledExecutorService scheduler;
@Override
public void contextInitialized(ServletContextEvent event) {
Data data = new Data();
event.getServletContext().setAttribute("data", data);
scheduler = Executors.newSingleThreadScheduledExecutor();
scheduler.scheduleAtFixedRate(new Reloader(data), 0, 30, TimeUnit.DAYS);
}
@Override
public void contextDestroyed(ServletContextEvent event) {
scheduler.shutdownNow();
}
}
Run Code Online (Sandbox Code Playgroud)
(注意没有TimeUnit.MONTH,所以这是"每月一次"最好的)
这个Reloader类看起来像这样:
public class Reloader implements Runnable {
private Data data;
public Reloader(Data data) {
this.data = data;
}
@Override
public void run() {
data.reload();
}
}
Run Code Online (Sandbox Code Playgroud)
在/WEB-INF/web.xml如下注册监听器之后
<listener>
<listener-class>com.example.Config</listener-class>
</listener>
Run Code Online (Sandbox Code Playgroud)
它将创建Data实例和一个data.reload()每30天执行一次的线程调度程序,您可以Data按如下方式访问每个servlet中的实例:
Data data = (Data) getServletContext().getAttribute("data");
Run Code Online (Sandbox Code Playgroud)
在JSP中如下:
${data}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1597 次 |
| 最近记录: |