【问题标题】:Refresh automatically on server side an ApplicationScoped Bean在服务器端自动刷新 ApplicationScoped Bean
【发布时间】:2018-12-19 09:07:57
【问题描述】:

我想在自动调用 init() 方法 1 小时后刷新一个 ApplicationScoped Bean。

从客户端,我可以创建一个按钮来更新 bean,但我希望它在每个特定小时自动重新加载,而无需单击或等待页面(因此没有 Ajax 回调)。

此外,我阅读了这篇文章: Refresh/Reload Application scope managed bean 但我想避免管理线程等。

是否可以在不改变bean的Scope的情况下实现?

谢谢

【问题讨论】:

    标签: java jsf-2 javabeans


    【解决方案1】:

    我解决了以这种方式实现:

    1) 添加 Runnable 实现

    @ManagedBean(eager= true, name="dashboardbean")
    @ApplicationScoped
    public class DashboardBean implements Serializable, Runnable {
    

    2) 添加实现方法“run”

    @Override
    public void run() {
        System.out.println("##########populateData#############");
        allServerCount = numbersServer.get("serverCount");
        System.out.println("###########server "+allServerCount+"#############");
        System.out.println("###########end populateData#############");
    }
    

    3) 实现了bean的init方法

    @PostConstruct
    public void init() {
        System.out.println("##########init#############");
        scheduler = Executors.newSingleThreadScheduledExecutor();
        scheduler.scheduleAtFixedRate(this, 0, 2, TimeUnit.MINUTES);
        System.out.println("##########end#############");
    }
    

    4) 添加销毁调度器的部分

    private ScheduledExecutorService scheduler; 
    
    @PreDestroy
    public void destroy() {
        scheduler.shutdownNow();
    }
    

    这是每 2 分钟在日志中生成的输出

    ##########populateData#############
    ###########server 339#############
    ###########end populateData#############
    ##########populateData#############
    ###########server 340#############
    ###########end populateData#############
    ##########populateData#############
    ###########server 340#############
    ###########end populateData#############
    

    【讨论】:

    • 记得设置@ManagedBean(eager=true,如果你想在服务器启动的时候初始化bean,如果不是第一次调用就会调用init方法
    • 我不明白为什么有人对这个解决方案投了反对票,请让我理解为什么这个运行良好的解决方案不正确。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-05
    • 1970-01-01
    • 2012-09-03
    • 1970-01-01
    • 2012-04-18
    • 1970-01-01
    • 2020-05-03
    相关资源
    最近更新 更多