有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java刷新/重新加载应用程序范围托管bean

我在刷新或重新加载应用程序范围的托管bean时遇到问题。它的行为就像缓存的数据bean。所以,一旦数据库端的数据被更改,我想在bean中重新加载列表。 是否需要刷新/重新加载列表,比如根据给定的时间每天刷新一次? 谢谢


共 (1) 个答案

  1. # 1 楼答案

    只需向应用程序范围的bean添加一个方法即可

    public void reload() {
        list = dao.list();
    }
    

    然后将这个bean抓取/注入另一个bean并调用该方法

    data.reload();
    

    更新抱歉,我忽略了“一天一次”这一点。你是说在后台自动重新加载?这最好由^{}管理的后台线程来实现。创建一个^{}如下所示:

    @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如下所示(假设托管bean名称为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();
            }
        }
    
    }