Не используйте сервлет для хранения данных.Скорее сохраните данные как атрибут ServletContext
.Вы можете сделать это с помощью 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();
}
}
(обратите внимание, что TimeUnit.MONTH
нет, так что это лучшее, что вы можете получить "раз в месяц")
Где класс Reloader
выглядит следующим образом:
public class Reloader implements Runnable {
private Data data;
public Reloader(Data data) {
this.data = data;
}
@Override
public void run() {
data.reload();
}
}
После регистрации прослушивателя в /WEB-INF/web.xml
следующим образом
<listener>
<listener-class>com.example.Config</listener-class>
</listener>
он создаст экземпляр Data
и однопоточный планировщик, который выполняет data.reload()
каждые 30 дней, и вы можете получить доступ кData
экземпляр в каждом сервлете выглядит следующим образом:
Data data = (Data) getServletContext().getAttribute("data");
и в JSP следующим образом:
${data}