我是属性(使用PropertyPlaceholderConfigurer)的大用户,以使我的应用程序尽可能“动态”。几乎所有的常量都是这样定义的。不管怎样,我目前正在定义一个默认 WAR 附带的 default.properties
。
在其他环境(验收/生产)中,我需要覆盖配置。我这样做如下:
<bean id="propertyManager"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:com/company/default.properties</value>
<value>file:${COMPANY_PROPERTIES_LOCATION}\kbo-select-settings.properties</value>
</list>
</property>
</bean>
通过这意味着我可以为每个环境使用可升级的构建。
但是,我确实不喜欢这样的事实:我无法从 WebSphere 内部更改我的任何属性。相反,我必须访问每台服务器(我们有 8 个集群)并相应地更改属性。如果我可以从 WebSphere 内部更改这些内容并随后执行重新启动,那么用户友好性会更高...
有人知道我如何做这样一个可推广的构建吗?我已经为 datasources/java mail/etc 定义了 JNDI 配置。
谢谢!
最佳答案
我们通过在每个环境(local、dev、int、tst ...)的属性文件上使用扩展来解决这个问题,并且每个文件都包含这些环境的特定值。您需要的唯一添加是服务器上的 VM 参数来设置 -Druntime.env=X。
您在配置文件中的查找将如下所示
<bean id="propertyManager"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:com/company/default.properties.${runtime.env}</value>
<value>file:${COMPANY_PROPERTIES_LOCATION}\kbo-select-settings.properties</value>
</list>
</property>
</bean>
当然,这仅在您拥有相当静态的环境时才有效,因为它仍然不适合在运行时更改它,但它确实使应用程序的升级变得非常简单。如果您希望能够在不重新部署应用程序的情况下更改这些值,则必须将它们存储在应用程序外部,您似乎已经在为kbo-select-settings.properties
关于java - WebSphere 和 PropertyPlaceholderConfigurer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1260927/