JEE - 每天重置 ejb 单例
JEE - reset ejb singleton everyday
我正在使用 JEE 并创建了 EJB-Singleton。它有一个字段 LRUMap,代表应用程序中存储数据的缓存。我想清除单例中的数据,或者在运行时杀死并重新启动整个单例。
是否可以选择定期执行此操作?例如每天重置一次单例 bean 以清除数据?
代码如下:
@Singleton
@ConcurrencyManagement(ConcurrencyManagementType.CONTAINER)
public class BpNotificationCacheBean {
private static final int CACHE_SIZE = 1000;
private Map<String, Boolean> cacheMap;
@PostConstruct
public void init() {
cacheMap = new LRUMap(CACHE_SIZE);
}
@Lock(LockType.WRITE)
public Boolean get(String businessPartnerId) {
return cacheMap.get(businessPartnerId);
}
@Lock(LockType.WRITE)
public void put(String businessPartnerId, Boolean isVIP) {
this.cacheMap.put(businessPartnerId, isVIP);
}
}
如果您在完整的 JEE 环境中,我会创建一个 Schedule
注释方法:
import javax.ejb.Schedule;
@Singleton
@ConcurrencyManagement(ConcurrencyManagementType.CONTAINER)
public class BpNotificationCacheBean {
private static final int CACHE_SIZE = 1000;
private Map<String, Boolean> cacheMap;
...
@Lock(LockType.WRITE)
@Schedule(hour = "1", persistent = false)
private void resetCache() {
cacheMap = new LRUMap(CACHE_SIZE);
}
}
关键是 Java EE Timer Service 的一部分的 Schedule 注释。我显示的注释每天运行 01:00(凌晨 1 点),但请参阅文档以了解如何更改它。
我正在使用 JEE 并创建了 EJB-Singleton。它有一个字段 LRUMap,代表应用程序中存储数据的缓存。我想清除单例中的数据,或者在运行时杀死并重新启动整个单例。 是否可以选择定期执行此操作?例如每天重置一次单例 bean 以清除数据?
代码如下:
@Singleton
@ConcurrencyManagement(ConcurrencyManagementType.CONTAINER)
public class BpNotificationCacheBean {
private static final int CACHE_SIZE = 1000;
private Map<String, Boolean> cacheMap;
@PostConstruct
public void init() {
cacheMap = new LRUMap(CACHE_SIZE);
}
@Lock(LockType.WRITE)
public Boolean get(String businessPartnerId) {
return cacheMap.get(businessPartnerId);
}
@Lock(LockType.WRITE)
public void put(String businessPartnerId, Boolean isVIP) {
this.cacheMap.put(businessPartnerId, isVIP);
}
}
如果您在完整的 JEE 环境中,我会创建一个 Schedule
注释方法:
import javax.ejb.Schedule;
@Singleton
@ConcurrencyManagement(ConcurrencyManagementType.CONTAINER)
public class BpNotificationCacheBean {
private static final int CACHE_SIZE = 1000;
private Map<String, Boolean> cacheMap;
...
@Lock(LockType.WRITE)
@Schedule(hour = "1", persistent = false)
private void resetCache() {
cacheMap = new LRUMap(CACHE_SIZE);
}
}
关键是 Java EE Timer Service 的一部分的 Schedule 注释。我显示的注释每天运行 01:00(凌晨 1 点),但请参阅文档以了解如何更改它。