Просто добавьте метод к bean-объекту области применения, который делает именно это.
public void reload() {
list = dao.list();
}
Затем захватите / вставьте этот bean-компонент в другой bean-компонент и вызовите метод.
data.reload();
Обновление извините, я пропустил бит "один раз в день".Вы имеете в виду автоматическую перезагрузку в фоновом режиме?Лучше всего этого добиться с помощью фонового потока, которым управляет ScheduledExecutorService
.Создайте ServletContextListener
следующим образом:
@WebListener
public class Config implements ServletContextListener {
private ScheduledExecutorService scheduler;
@Override
public void contextInitialized(ServletContextEvent event) {
Reloader reloader = new Reloader(event.getServletContext());
scheduler = Executors.newSingleThreadScheduledExecutor();
scheduler.scheduleAtFixedRate(reloader, 1, 1, TimeUnit.DAYS);
}
@Override
public void contextDestroyed(ServletContextEvent event) {
scheduler.shutdownNow();
}
}
Где класс Reloader
выглядит следующим образом (при условии, что имя управляемого компонента data
)
public class Reloader implements Runnable {
private ServletContext context;
public Reloader(ServletContext context) {
this.context = context;
}
@Override
public void run() {
Data data = (Data) context.getAttribute("data");
if (data != null) {
data.reload();
}
}
}