使用 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 的正确方法吗?

假设一切正常,您所做的禁用缓存看起来没问题。

至于有没有缓存对你的应用有什么影响,不在本题讨论范围之内