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