如何在没有服务器重启的情况下清除ehcache

时间:2012-06-06 10:04:47

标签: java caching ehcache tomcat5.5

虽然我猜它极不可能 - 但有没有办法在不重新启动服务器的情况下清除ehcache? 我需要清除缓存进行一些测试 - 我无法更改代码,也无法多次重启服务器。

PS:我正在使用apache-tomcat-5.5.25 请告诉我。 谢谢, PSVM

2 个答案:

答案 0 :(得分:7)

您是否通过JMX公开Ehcache?然后,您可以使用JMX操作清除缓存,例如使用jvisualvm。寻找像net.sf.ehcache.CacheManager这样提供clearAll()操作的MBean。

答案 1 :(得分:0)

使用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方法调用 - 清除二级缓存!