可能性は非常に低いと思いますが、サーバーを再起動せずにehcacheをクリアする方法はありますか?一部のテストのためにキャッシュをクリアする必要があります-コードを変更できず、サーバーを複数回再起動する余裕がありません。
PS:私はapache-tomcat-5.5.25を使用しています。教えてください。ありがとう、psvm
JMXを介してEhcacheを公開していますか?次に、jvisualvmなどのツールを使用して、JMX操作を使用してキャッシュをクリアできます。net.sf.ehcache.CacheManager
操作を提供するようなMBeanを探しますclearAll()
。
spring + hibernateを使用してmbeanを公開する:
import org.hibernate.Cache;
import org.hibernate.SessionFactory;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
@Component("CacheManagerMBean")
public class CacheManagerMBean {
private static final org.slf4j.Logger logger = LoggerFactory.getLogger(CacheManagerMBean.class);
@Resource(name = "sessionFactory")
private SessionFactory sessionFactory;
public void clearCache() {
Cache cache = sessionFactory.getCache();
if (null != cache) {
logger.info("Clearing cache...");
cache.evictAll();
cache.evictAllRegions();
logger.info("Clearing cache...Done!");
} else {
logger.error("No second level cache available for session-factory");
}
}
}
XML構成:
<bean id="jmxExporterCacheManagerMBean" class="org.springframework.jmx.export.MBeanExporter">
<property name="beans">
<map>
<entry key="CacheManager:type=SecondLevelCacheManager">
<ref bean="CacheManagerMBean"/>
</entry>
</map>
</property>
</bean>
次に、jconsoleを使用してJavaプロセスに接続し、Mbeanメソッドの呼び出しを使用して、第2レベルのキャッシュをクリアします。