java - 在服务器端自动刷新 ApplicationScoped Bean
问题描述
我想在 1h 自动调用 init() 方法后刷新一个 ApplicationScoped Bean。
从客户端,我可以创建一个按钮来更新 bean,但我希望每隔特定小时自动重新加载它,而无需单击或等待页面(因此没有 Ajax 回调)。
此外,我阅读了这篇文章: 刷新/重新加载应用程序范围托管 bean ,但我想避免管理线程等。
是否可以在不更改 bean 的范围的情况下实现?
谢谢
解决方案
我解决了以这种方式实施:
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#############
推荐阅读
- reactjs - 在一个反应路由器上同时使用 url 参数和查询参数?
- node.js - unlinkSync 并没有真正删除文件
- python - 维护包与子模块
- c - 如何使用链表打印逻辑门的真值表
- javascript - 根据键过滤对象,然后根据键和值构造新的对象数组
- html - HTML 中图像上的文本定位不正确
- flutter - 我的 ElevatedButton 在 StackWidget 中不起作用。扑
- biopython - 无法使用 biopython 从 pubmed 检索文件
- reactjs - 如何使用 React Js 创建一个基于距离点显示值的水平范围滑块?
- sql - 不知道名称的 DROP 约束