【问题标题】:How to hold data for jar as library with cluster awareness如何将 jar 的数据保存为具有集群意识的库
【发布时间】:2014-07-28 07:15:42
【问题描述】:

我正在创建一个库(java jar 文件)来提供问题的解决方案。库主要针对web应用(j2ee应用),可以配合spring等框架使用。 目标 j2ee 应用程序将部署在集群环境中。用户将通过将其添加到应用程序类路径中来使用此库。

库有一些配置的依赖关系,这些配置本身打包在库(jar)中,将在运行时使用。 在运行时可以修改配置。

由于它是针对集群环境的,如果对配置进行任何修改,必须将更新的配置复制到集群环境的所有节点。

根据我的理解,有两种方法可以在运行时保存配置(如果我错了,我不确定是否会纠正我)

1.将配置存储在文件中

2.将配置存储在数据库中

第一种方法(将配置存储在文件中) 库中有一个属性文件来保存初始配置。 在服务器启动时,属性文件中的配置将被复制到服务器物理位置的某个文件(abc.xml)中。

将有一组 API 用于从用户主位置在 abc.xml 文件中执行 CRUD 操作。 而且每次都会用到abc.xml文件。

在这种方法中保存数据是可能的,但对于集群环境,我不知道在修改的情况下它将如何更新集群的所有节点。

在第二种方法中(将配置存储在数据库表中)

在发布工具包(jar 文件)的同时,sql 表查询也使用 jar 发布。 用户必须使用该查询创建表。

库中有一个属性文件来保存初始配置。 在服务器启动时,属性文件中的配置将被复制到数据库中。

将有一组 API 来对数据库执行 CRUD 操作。 由于对配置进行了任何修改,集群的所有节点都可以使用某些第三方工具(Hazel cast 或其他任何工具)更新为最新数据。

在分析中我发现 Quartz 使用数据库方法来保存其配置。 所以当一个下载石英发行版时,它也有sql查询来在数据库中创建所需的表,石英会自己使用这些表。

我想知道以库(jar)形式保存配置的标准设计实践是什么,在这种情况下需要注意哪些因素。

【问题讨论】:

    标签: java jakarta-ee jar cluster-computing


    【解决方案1】:

    还有其他解决方案。使用集群感知缓存技术,如 EhCacheApache JCSHazelcast。使用缓存 API 从库中检索配置数据。你可以在你的库中添加一个监听器来轮询配置文件并更新缓存。

    如果您打算使用您提到的解决方案 1,您可以在库中设置一个侦听器,该侦听器侦听配置文件并在发生更改时更新服务器副本。解决方案 2 也是如此,但如果我处于类似情况,我宁愿使用缓存技术来处理经常访问的数据(配置)。它给我的好处是我不必更新所有节点中的配置,因为它会自我复制。

    【讨论】:

    • 感谢 Richie 的回答,同意还有其他解决方案,但我正在寻找一种标准的设计方法,或者在这种情况下其他知名框架(石英除外)做什么。关于更新缓存,因为它是自我复制的,所以对我来说很容易,但是在文件或数据库中持久化配置仍然是一个悬而未决的问题。
    • 存储在属性文件中并将属性加载到缓存 - 这听起来更像是一种企业方式吗?
    • 我选择了基于数据的方法来持久化配置和 hazel cast 以在集群环境的节点之间共享缓存。
    猜你喜欢
    • 2019-09-26
    • 2015-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-21
    相关资源
    最近更新 更多