我正在使用Weblogic 10g集群环境来部署我的应用程序.在我的应用程序中,我使用了一个类Cache.java来懒惰地从数据库加载一些属性.这是它的工作原理. Cache.java是一个单例类,实例变量作为缓存对象.例如,其中一个实例变量是List<String> STORES_IN_CITY.群集启动时,此缓存为空.实际值在数据库中.该课程的实施如下:
public class Cache
{
private List<String> STORES_IN_CITY;
private static final Cache cache=new Cache();
public static Cache getCache()
{
return cache;
{
private Cache()
{
// private constructor to have singleton class
}
public List<String> getStoresInCity()
{
if(null==STORES_IN_CITY || STORES_IN_CITY.size()==0){
STORES_IN_CITY=getStoresFromDatabase();
}
return STORES_IN_CITY;
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,有多个数据库调用来获取缓存STORES_IN_CITY.我相信这是因为集群环境,对于每个服务器,都有一个不同的JVM实例和一个缓存副本.因此,根据在运行时针对请求命中的服务器,将进行数据库调用.我希望跨服务器有一个缓存.这可能吗?
我希望我已经详细阐述了我的问题.如果需要进一步说明,请告诉我.
谢谢,Siddharth
(...)我相信这是因为集群环境,对于每台服务器,都有不同的JVM实例和缓存副本。
这是对的。
我希望跨服务器有一个缓存。这可能吗?
您可以实现weblogic.cluster.singleton.SingletonService(单例服务是在托管服务器上运行的一项服务,一次只能在集群的一个成员上使用)。