我们的生产应用程序在weblogic上运行。它是一个基于spring和struts的Web应用程序。需要db加载查询以及通过GUI句柄动态重新加载的功能。一些现有的实用程序文件在spring中没有配置为bean(不能在这一点上),并且具有静态方法,这些方法使用静态变量/常量来在每个静态方法中运行查询。如果我必须在应用程序启动并运行时从数据库重新加载查询,我不明白Weblogic集群的行为方式。换句话说,我们如何确保在所有JVM上重新加载对静态变量的查询,以便下一次点击任何节点上的方法将获取新加载的查询的结果?
答案 0 :(得分:1)
让我们看看这是否能回答您的问题。
如果您有3台托管服务器,并且已经在所有3台托管服务器上部署了Spring应用程序,则spring将启动3个应用程序上下文。 (每个受管服务器一个)。
他们不互相交谈,他们将在自己的服务器内运行。他们将拥有自己的一组bean和他们自己的静态变量。
因此,一台服务器上的重新加载将用于该服务器。您必须在所有三台服务器上重新加载静态内容,以便将其反映在整个应用程序中。
如果您想要一次重新加载,那么请使用属性文件(或所有3个托管服务器可以从同一位置共享的任何其他资源,如管理服务器的JNDI,存储在文件系统上的属性文件,存储您的在某些数据库表中查询并从那里加载 - 只要所有应用程序都指向同一个数据库)
答案 1 :(得分:0)
每个WebLogic受管服务器都有自己的Spring应用程序上下文(如Vivek所述)。
确保每个JVM都有一组刷新的“数据库查询”的一种方法是使用共享的分布式缓存(例如ehcache),这样无论哪个节点刷新,您的数据都会刷新。分布式缓存和缓存复制是解决您问题的复杂解决方案。