我有 2 个不同的 web 应用程序(打包到不同的 war 文件中),它们需要通过缓存(ehcache)共享一些数据。我想和你一起测试这个想法,看看它是否有效。

我的想法是创建一个引导/访问 ehcache 的服务并将其打包在 jar 中。然后将该jar打包到两个war中:

  • 战争1:ehcache-service.jar
  • 战争2:ehcache-service.jar

ehcache 在这样的配置下可以工作吗?

有帮助吗?

解决方案

您需要创建一个单独的 jar,其中包含您计划缓存的所有类(及其所有依赖项),然后将该 jar 以及 ehcache.jar 部署为库(取决于您使用的应用程序服务器,该过程可能会有所不同),对于 Tomcat 6,这意味着只需将 jar 复制到 lib 文件夹即可。

然后发生的事情是,ehcache 和您的域类将由所有 Web 应用程序共享的类加载器加载,因此实例将被缓存并在内存中访问。

域类的依赖关系很重要,因此您应该看看这种方法在您的项目中是否可行。它还可能会影响您重新启动 Web 应用程序的方式。


此外,您应该意识到缓存和共享不一定是同一件事。缓存是一种优化。如果将对象实例放入缓存中,例如,如果缓存没有足够的存储空间或驱逐策略配置,则它可能会立即被驱逐。因此,您可能必须回顾一下您计划使用 ecache 的总体方式。

其他提示

配置的问题是,每个 war 都将使用单独的 ClassLoader 加载,并且将有两个 ehcache-service 实例 - 每个 Web 应用程序都有自己的服务副本。您可以将缓存服务实现为 Web 服务(例如)并在 war1 和 war2 中使用它。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top