我有一个客户在独立应用程序中使用的简单API。在幕后我的API使用Ehcache来提高性能。
一切正常,但我的客户端需要在我的API中调用shutdown()
方法来调用CacheManager.shutdown()
,否则即使主线程已完成,Ehcache也会继续在后台运行。
有没有办法可以避免对我的客户进行额外的shutdown()
调用?
我尝试使用@PreDestroy Spring注释来调用此调用,但它不起作用?
这里我要添加一个示例客户端程序。
public class ClientApp{
@Autowired
private IClientService service;
public static void main(String[] args){
try{
service.getClients();
...
} finally {
service.shutdown(); // to shutdown the cache background thread
}
}
}
在ClientServiceImpl.java中,我有以下几行
public void shutdown(){
LOGGER.info("Shutting the cache down...");
ehcacheManager.shutdown();
}
答案 0 :(得分:1)
您的示例确认了独立应用程序设置。 当主线程终止时,Ehcache不应阻止JVM关闭。
如果是,您需要为此问题添加线程转储,以便我们进一步分析问题及其原因。
答案 1 :(得分:1)
添加以下行可以满足我的需求。
System.setProperty(CacheManager.ENABLE_SHUTDOWN_HOOK_PROPERTY, "true");