跨服务器实例管理共享属性文件

时间:2012-08-29 16:12:40

标签: java spring properties

我开发了Flex-Java - 我已部署到Amazon EC2映像中的Spring Web Application - 一切看起来都很棒。

但是,我需要在位于不同计算机上的多个应用程序实例之间自动扩展和共享用户请求,即不在同一个Tomcat容器中。 Amazon管理负载平衡,应用程序使用AMQ主题来传达每个实例之间的关键应用程序级别更改。

其中一个通知可能是属性。我有几个属性文件,我使用@Value注释注入相关的Spring bean。这些属性文件位于类路径根(classpath:properties /)

的属性文件夹中

在单个节点上运行时,当我更新属性时,我使用setter更新内存值,并使用FileInputStream和FileOutputStream将更改写回相关的属性文件。这很容易。

然而,现在明显的问题是当我自动缩放并在另一个容器中启动新实例时会发生什么?此应用程序将读取属性文件的已部署(旧)版本,并最终与其他并行节点的行为不同。

真的希望在数据库中维护基于文件的配置,如果可以的话 - 我知道数据库解决方案将是这里最普遍的响应,但任何建议都将受到赞赏。

由于

1 个答案:

答案 0 :(得分:0)

至于您已经在使用JMS主题,我建议您使用持久订阅。

如果客户端需要接收在主题上发布的所有消息,包括在订阅者处于非活动状态时发布的消息,则它使用持久的TopicSubscriber。 JMS提供程序保留此持久订阅的记录,并确保来自主题发布者的所有消息都被保留,直到这个持久订阅者确认它们或它们已过期为止。

查看JMS API:http://docs.oracle.com/javaee/6/api/javax/jms/Session.html#createDurableSubscriber(javax.jms.Topic,java.lang.String)