问题标签 [apache-commons-config]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 是否可以在运行时提供新的 PropertiesConfiguration 文件?
背景:
我要求向用户显示的消息必须因语言和公司部门而异。因此,我不能使用开箱即用的资源包,所以我实际上是在使用 PropertiesConfiguration 文件编写我自己的资源包版本。
此外,我要求消息必须在生产中动态修改,而无需重新启动。
我正在加载三个不同的属性文件迭代:
这些文件存在于类路径中。此代码将进入一个标记库,供门户中的多个 portlet 使用。
我构建了可能的 .properties 文件,然后尝试通过以下方式加载每个文件:
如果它确实成功地找到了一个文件,它会将创建的 PropertiesConfiguration 保存到一个 hashmap 中以供重复使用,然后尝试找到 key。(与常规资源包不同,如果找不到密钥,它会尝试查找更通用的文件以查看该文件中是否存在该密钥 - 因此只需将覆盖异常放入语言/部门特定属性中文件。)
问题:
如果文件在第一次检查时不存在,则会引发预期的异常。但是,如果稍后将文件放入类路径中,然后重新运行此代码,则仍会引发异常。重新启动门户显然可以解决问题,但这对我没有用 - 我需要能够允许他们将新消息放置在适当的位置,以便在没有重新启动的情况下覆盖 language/companyDivision。而且我对为所有可能的部门创建空白文件并不感兴趣,因为有很多部门。
我假设这是一个类加载器问题,因为它第一次确定类路径中不存在该文件,并在尝试重新加载同一文件时缓存该结果。我对使用类加载器做任何太花哨的事情不感兴趣。(我将是唯一能够理解/维护该代码的人。)具体的环境是 WebSphere Portal。
有什么办法可以解决这个问题还是我被卡住了?
java - 使用 PropertiesConfiguration 出了什么问题?
为了更新我的.properties
文件,我使用 Apache Commons Configuration 的PropertiesConfiguration。但是当我使用代码时:
我收到此错误:
这里出了什么问题?我第一次使用它。
PS:是否有任何相对等效或更好的库可供处理.properties
?
java - apache常用配置库:属性文件损坏
我从客户那里得到了一个损坏的属性文件。该文件由应用程序修改以更新版本号。该代码使用apache commons 配置。当我测试时,该库似乎总是以 iso-8859-1 格式编写文件。
代码简化如下。以下代码写入坏文件的可能性有多大?
以防万一 - 坏文件如下所示。它看起来不像任何编码。该文件最初是普通的属性文件,其键和值全部为英文(ascii 字符)。
F????Co?aR??m??E?3#?? = h\u00BD5j\u00B3\u00E0\u0096\u001D\u0081fe\u00BEo\b\u00A3\u0001\u00FE\u00A4\u00DE\u0000\u00FBi\"\u009C{\u00FC\u00D9\u00E2?c\u00F6\u00FF% B\u00A47\u00195\u001EXv\u0097/\u00D7x\u0099\u000E\u00A2gIX\u0014\u0097]k\u00882\u0003\u0014\u0097\u00BC\u00C3\u00AE\u00B3\u001E\u00B3\u001E\u00B3\u001E\u00B4\u000E\u00&0 \u0016\u009B\"7\u0085'\"\u00DCT*v'\u0092\u0007\u0091A\u00BD\u00ACl6~\u0097\u00C0\u00B1\u00D1\u00EB\u00FF\u00A8\u00F3\u0001'\u00BF\ u0006\u001F\u009C\fk\u009F\u00C2\u00D9L^_\u0004J4\u00AF\u00D8\u00DAW\u00C4\u00CDj\u00E3\u0095\u00D1+\u00CE?\u0004>Z]\u00800\u0016\u u0095\u00AC\u00F7\u00E7\u009ATF\u0019\f)\u00A3\u00A9\u00DC\u00AD\u00ACtq5\u0085\u008E-\u00A3oH\u0000\u00C2\u0092\u00B5\u0017&H\u\008FAG u0003!
编辑:客户环境是日本的。应用程序如何始终运行
-Dfile.encoding=UTF8
java - 任何 Apache Commons-Configuration 替代品/竞争对手?
我最近尝试使用Apache Commons-Configuration来管理一些本地 XML 配置文件。它在易用性(无法加载空配置文件,CombinedConfiguration 需要为大多数操作使用底层配置等)以及跨 API 的一致性(保存操作没有事件,事件不是通用的)方面严重不足。
除了写入注册表的 JDK 首选项(我不想要)之外,还有其他替代方法来管理基于文件的首选项吗?
使用其他文件格式不是一种选择。
java - Java 的多租户/条件配置有哪些库?
我正在尝试找到一种配置服务器端 Java 应用程序的解决方案,以便系统的不同用户与系统进行交互,就好像它的配置不同(多租户)。例如,当我的应用程序为来自 user1 的请求提供服务时,我希望我的应用程序以克林贡语响应,但对于所有其他用户,我希望它以英语回复。(我故意选择了一个荒谬的例子,以避免细节:重要的是我希望应用程序针对不同的请求表现不同)。
理想情况下,有一个通用的解决方案(即一个允许我将用户特定的覆盖添加到我的配置的任何部分而无需更改代码的解决方案)。
我看过 Apache Commons Configuration,它内置了对多租户配置的支持,但据我所知,这是通过将一些基本配置与一些覆盖组合来完成的。这意味着我将有一个配置指定:
并且,说一个user1.properties
覆盖文件:
不幸的是,如果我们的支持团队可以在一个地方查看所有相关配置,并且以某种方式内联指定覆盖,而不是为base和overrides分别设置文件,那么他们会容易得多。
我认为 Commons Config 的多租户 + 类似Velocity 模板的某种组合来描述底层配置中的条件元素是我的目标 - Commons Config 用于轻松与我的配置交互, Velocity 用于非常有表现力地描述任何覆盖,在单一配置中,例如:
人们使用什么解决方案来解决这类问题?
spring - 使用 PropertyPlaceholderConfigurer 将使用 Apache Commons Config 的库与 Spring 项目集成时遇到问题
我有一个发送 JMS 通知的自定义库。这个想法是您可以通过在项目中设置一些属性来使用该库。
自定义库正在使用 Apache Commons 配置。(我提到这一点的原因是我怀疑它可能在我的问题中起作用)。我正在尝试在我当前的 Spring 项目中使用它,该项目不使用 Commons Config,但使用 PropertyPlaceholderConfigurer。我已经将需要的属性写在 .properties 文件中。
我已将该库作为依赖项添加到我的 pom.xml 文件中。我试着像这样将它添加到我的web.xml中
在我的 Spring 项目中创建 bean 时,我尝试引用库中定义的 bean 之一,以便可以使用它。创建需要我的属性文件中的属性的库 bean 之一时出错。
我知道项目中的其他一些属性文件的布尔属性设置方式完全相同,没有问题。这是我在applicationContext.xml中加载属性文件的方式(在检查日志后,似乎加载正确)
最后是我的 some-monitoring.properties 文件:
所以我只是想知道布尔属性发生了什么,为什么?如果 PropertyPlaceholderConfigurer 没有加载布尔属性是一个普遍问题,那么奇怪的是我对其他属性文件没有问题。是否因为使用 Commons Configuration 的库而存在一些冲突?我对 Spring 如何加载这些属性的了解非常浅,所以这似乎是一个更好地处理幕后情况的机会。
如果有人可以阐明正在发生的事情以及如何修复/解决它,我们将不胜感激!
java - 从多个属性文件自动加载更新的属性
我的要求是在对属性文件进行更改时自动更新我的应用程序的配置。
为了维护属性,我使用了 Apache Commons Configuration 项目中的 PropertiesConfiguration。(使用 commons-configuration-1.6.jar)。
使用 FileChangedReloadingStrategy 适用于对单个属性文件进行的更改,并由我的应用程序拾取。
但是我使用它们的加载方法使用多个属性文件,当更新任何一个属性文件时,我需要能够检测到更改并自动更新我的项目中的配置。
有没有办法使用 FileChangedReloadingStrategy 进行此更新?
或者你有什么其他方法可以建议我使用吗?
java - 我可以在 Apache Commons Config 中同时使用数组和非数组吗?
使用以下属性文件:
我想将第一项作为字符串检索,将第二项检索为数组。我原以为getString
vsgetStringArray
会处理这个问题,但事实并非如此 -getString("foo")
只是在逗号之前获取所有内容,即“你好”。
如果我使用 禁用定界符解析setDelimiterParsingDisabled
, foo 很好,但这也会改变getStringArray("bar")
返回单元素数组的行为!
我找不到如何明确地告诉它我希望它如何解释单个配置项,无论是作为字符串还是作为数组。我不想将配置项放入具有不同分隔符规则的单独配置文件中,并且我更喜欢使用逗号作为 getStringArray 案例的分隔符。
详细地说,这个片段打印hello - 2
或者hello, world! - 1
- 我希望它打印hello, world! - 2
!
java - 我可以为 spring 提供我自己的变量插值器吗?
我了解到我可以为 Spring 提供一个<context:property-placeholder>
元素,该元素似乎使用PropertyPlaceholderConfigurer${foo}
针对属性文件插入变量(即替换标记,如)。
有没有办法自定义用于解析令牌的类?特别是,我很想使用Apache Commons Config Configuration
对象来提供令牌的值,而不是使用属性文件。
apache-commons-config - 用自定义替换默认配置迭代器
我一直在尝试在公共配置中注册一个自定义配置插值器,默认情况下会处理一些后备值。
这是插值器的代码。
这是我的配置生成器的样子
这是我实例化我的配置生成器的方式。
由于某种原因,我的自定义插值器中的查找方法永远不会被调用。如果您已成功注册自定义插值器,有人可以帮忙吗?
提前致谢。