gpt4 book ai didi

java - 如何在不同tomcat实例之间运行的spring web应用程序之间同步Ehcache数据?

转载 作者:行者123 更新时间:2023-11-28 22:29:13 26 4
gpt4 key购买 nike

我有一个使用 EhCache 进行数据缓存的 Spring Web 应用程序。

Ehcache 包含很少的 Java.Util.Map,用于整个应用程序 View 页面。当用户从前端屏幕创建一条记录(比如一些业务 JAVA POJO 对象)时,该记录将被插入到数据库中,随后,EhCache 持有的 map 将被更新。

后来我们把这个web应用部署在多个,也就是3个tomcat实例中。可通过 Apache HTTP 负载均衡器访问应用程序。

我们面临的问题是,当用户向数据库中插入一条记录时,EhCache 仅在收到请求的 tomcat 实例上运行的应用程序中更新。由于我们有 3 个 tomcat 实例,因此在其他 2 个 tomcat 实例上运行的应用程序没有更新的 EhCache 数据。这会影响用户立即从屏幕上查看更新后的数据。

谁能告诉我如何解决这个问题。如何在多个 tomcat 实例上运行的 Spring Web 应用程序之间同步 EhCache 数据。

FYKI,这是我职业生涯中的第一个 Web 应用程序,并且是数据缓存概念的初学者。

请告诉我解决这个问题的方法?

让我分享一下我是如何在我的 spring web 应用程序中简单地配置 EhCache 的,

下面是在spring-servlet.xml中配置的

<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager" p:cache-manager-ref="ehcache" />
<bean id="ehcache" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"
p:config-location="classpath:ehcache.xml" p:shared="true"/>

又来自Java业务类

public class PortfolioUserDetailsServiceImpl implements PortfolioUserDetailsService {

private Logger logger = LoggerFactory
.getLogger(PortfolioUserDetailsServiceImpl.class);

private UserDao userDao;

@Autowired
private CacheManager cacheManager;
private Ehcache userRoleCache;


@PostConstruct
public void init() {

// Load our widgets cache:
userRoleCache = cacheManager.getEhcache("userRoleCache");

// Create an EHCache Element to hold the widget
Element element = new Element("getAllRoles", userDao.getAllRoles());

// Add the element to the cache
userRoleCache.put(element);

}

@PreDestroy
public void destory() {
logger.info("INVENTORYSERVICEIMPL destroy method called");
}

这是我的ehcache.xml

<?xml version="1.0" encoding="UTF-8"?>

<ehcache name="PortfolioCache" updateCheck="false">
<defaultCache maxElementsInMemory="10000" eternal="false"
timeToIdleSeconds="0" timeToLiveSeconds="0" overflowToDisk="true"
diskPersistent="false" diskExpiryThreadIntervalSeconds="120"
memoryStoreEvictionPolicy="LRU" />


<cache name="userRoleCache" maxElementsInMemory="100" eternal="false"
timeToIdleSeconds="0" timeToLiveSeconds="0" memoryStoreEvictionPolicy="LFU">
</cache>

<diskStore path="java.io.tmpdir" />

</ehcache>

最佳答案

我认为最好的方法是使用“Terracotta Distributed Ehcache”您可以引用以下链接:

http://terracotta.org/documentation/enterprise-ehcache/get-started http://ehcache.org/documentation/2.6/get-started/about-distributed-cache

关于java - 如何在不同tomcat实例之间运行的spring web应用程序之间同步Ehcache数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28107222/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com