我有2个不同的webapps(包装到不同的war文件中),需要通过缓存(ehcache)共享一些数据.我想和你一起测试这个想法,看看它是否有效.
我的想法是创建一个服务来引导/访问jar中的ehcache和包.然后将那个罐装入两场战争中:
WAR1:ehcache-service.jar
WAR2:ehcache-service.jar
ehcache会在这样的配置下工作吗?
您需要创建一个单独的jar,其中包含您计划缓存的所有类(及其所有依赖项),然后将此jar以及ehcache.jar部署为库(取决于您使用该过程的应用程序服务器)不同的),在Tomcat 6的情况下,这意味着只是将jar复制到lib文件夹.
然后发生的是,ehcache和您的域类将由所有Web应用程序共享的类加载器加载,因此实例将被缓存并可在内存中访问.
域类的依赖关系非常重要,因此您应该了解这种方法在项目中是否可行.它还可能会影响您重新启动Web应用程序的方式.
此外,您应该知道缓存和共享不一定是必要的.缓存是一种优化.如果将对象实例放入缓存中,则可能会立即逐出,例如,如果缓存没有足够的存储空间或驱逐策略配置.因此,您可能需要查看计划一般使用ecache的方式.