使用 jmx 在运行时禁用 ehcache
Disable ehcache at runtime with jmx
我试图在 运行 时禁用分布式 ehcache。这有助于滚动部署到我们的多个服务器,因此新版本的代码不会干扰等待更新到较新代码的服务器。
我想出了以下内容class
@Component
@ManagedResource(objectName = "net.sf.ehcache:category=CustomCacheManager,name=cache-ms", description = "Custom managing of ehcache")
public class CacheJmxManagerService {
@Autowired
private CacheManager cacheManager;
@ManagedOperation
public void enableCaches(){
String[] cacheNames = cacheManager.getCacheNames();
for (String cacheName : cacheNames) {
cacheManager.getCache(cacheName).setDisabled(false);
}
}
@ManagedOperation
public void disableCaches(){
String[] cacheNames = cacheManager.getCacheNames();
for (String cacheName : cacheNames) {
cacheManager.getCache(cacheName).setDisabled(true);
}
}
}
<bean id="cacheManager"
class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
<property name="configLocation">
<value>${sslsConfPath}ehcache-#{applicationName}.xml</value>
</property>
<property name="shared" value="true"/>
</bean>
bean 是在应用程序上下文中配置 ehcache 管理器的方式。
然而,当我通过 jmx 和 运行 jmeter 测试来测试负载时,结果是一样的。无论有没有缓存,我们的调用都一样快。这是在 Spring 中禁用 ehcache 的正确方法吗?
假设一切正常,您所做的禁用缓存看起来没问题。
至于有没有缓存对你的应用有什么影响,不在本题讨论范围之内
我试图在 运行 时禁用分布式 ehcache。这有助于滚动部署到我们的多个服务器,因此新版本的代码不会干扰等待更新到较新代码的服务器。
我想出了以下内容class
@Component
@ManagedResource(objectName = "net.sf.ehcache:category=CustomCacheManager,name=cache-ms", description = "Custom managing of ehcache")
public class CacheJmxManagerService {
@Autowired
private CacheManager cacheManager;
@ManagedOperation
public void enableCaches(){
String[] cacheNames = cacheManager.getCacheNames();
for (String cacheName : cacheNames) {
cacheManager.getCache(cacheName).setDisabled(false);
}
}
@ManagedOperation
public void disableCaches(){
String[] cacheNames = cacheManager.getCacheNames();
for (String cacheName : cacheNames) {
cacheManager.getCache(cacheName).setDisabled(true);
}
}
}
<bean id="cacheManager"
class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
<property name="configLocation">
<value>${sslsConfPath}ehcache-#{applicationName}.xml</value>
</property>
<property name="shared" value="true"/>
</bean>
bean 是在应用程序上下文中配置 ehcache 管理器的方式。
然而,当我通过 jmx 和 运行 jmeter 测试来测试负载时,结果是一样的。无论有没有缓存,我们的调用都一样快。这是在 Spring 中禁用 ehcache 的正确方法吗?
假设一切正常,您所做的禁用缓存看起来没问题。
至于有没有缓存对你的应用有什么影响,不在本题讨论范围之内