在服务器端自动刷新 ApplicationScoped Bean
Refresh automatically on server side an ApplicationScoped Bean
我想在 1 小时后自动调用 init() 方法来刷新 ApplicationScoped Bean。
从客户端,我可以创建一个按钮来更新 bean,但我希望它每隔特定的时间自动重新加载一次,而无需单击或等待页面(因此没有 Ajax 回调)。
另外我看了这篇文章:
Refresh/Reload Application scope managed bean
但我想避免管理线程等。
是否可以在不改变bean的Scope的情况下实现?
谢谢
我决定以这种方式实施:
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#############
我想在 1 小时后自动调用 init() 方法来刷新 ApplicationScoped Bean。
从客户端,我可以创建一个按钮来更新 bean,但我希望它每隔特定的时间自动重新加载一次,而无需单击或等待页面(因此没有 Ajax 回调)。
另外我看了这篇文章: Refresh/Reload Application scope managed bean 但我想避免管理线程等。
是否可以在不改变bean的Scope的情况下实现?
谢谢
我决定以这种方式实施:
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#############