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

标签 java spring properties

我开发了 Flex - Java - Spring Web 应用程序,并将其部署到 Amazon EC2 镜像中 - 一切看起来都很棒。

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

这些通知之一可能是属性。我有几个属性文件,我使用 @Value 注释将它们注入(inject)到相关的 Spring bean 中。这些属性文件驻留在类路径根目录的属性文件夹中 (classpath:properties/)

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

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

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

谢谢

最佳答案

就您已经在使用 JMS 主题而言,我建议您使用持久订阅。

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

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

关于java - 管理跨服务器实例的共享属性文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12182198/

相关文章:

c# - 如何实现一个不简单封装字段的数组属性?

c# - 无需反射即可将 get/set 属性作为参数传递的最佳方法

java - 为什么我的 JOptionPane 错误消息不会弹出?

java - @ControllerAdvice 类中的信息传递到哪里

Java Swing : JScrollPane not working

java - 为 Tomcat 定制 WAR 部署

java - Spring 休息 : when pathVariable matches multiple entities should spring return a list or throw error

java - 如何更新属性文件?

java - 无法在 Map Side Join 中使用 Composite textinputFormat

java - 我总是在 Spring mvc 应用程序中收到 Getting HTTP-404 错误