繁体   English   中英

如何修改java属性文件中的值

[英]How do you modify values in java properties file

我有一个config.properties文件,其中包含可配置的属性,例如在tomcat上部署的webapp中的数据库连接详细信息。 例如

local.driver: com.mysql.jdbc.Driver
local.username:myuser
local.password:mypass

dev.driver: com.mysql.jdbc.Driver
dev.username:mydevuser
dev.password:mydevpass

我可以使用spring Environment对象或@Value从config.properties中检索值。 我的问题是当你在dev上运行时,如何让Spring的环境对象在本地和dev属性上运行时选择本地属性? 另外,保存敏感数据听起来也不对,例如属性文件中的生产数据库连接细节将在代码库中浮动。 那么在生产环境中如何添加生产细节呢? 理想情况下,我希望在我喜欢的时候更改它们,而不必重新部署应用程序。 我正朝着正确的方向前进吗?

注 - 我在SO上看到的所有答案都讨论了在java代码中更改这些属性。 我不想这样做,我希望能够独立于应用程序代码配置这些值。

谢谢

您可以查看spring配置文件以加载特定环境的特定文件。

或者,您还可以使用JNDI属性或容器中设置的环境属性参数化从应用程序上下文中加载属性的文件。

例:

<context:property-placeholder ignore-unresolvable="true" location="${env.config.file:classpath*:META-INF/spring/profiles/dev/dev.properties}" />

启动它时,可以使用-Denv.config.file =在容器级别(比如Tomcat)设置env.config.file。 通过这样做,Spring自动在系统中找到属性并替换它。 如果未明确设置它(例如,在dev中可能使用其他容器,例如jetty),它将使用给定的默认值(在此示例中为dev.properties)。

通过将属性文件放在war / ear之外,可以随意更改它们,并且只需要重新启动上下文。 或者,您可以查看可重新加载的属性占位符。 如果您不希望明确存储在战争中的密码,这也会有所帮助。

要加密属性文件中的信息,如果您使用的是Spring 3,还可以查看: http//www.jasypt.org/spring3.html

为了获取env特定值,您有几个选项

  • 如果您可以基于env创建多个属性文件,那么您可以使用Spring配置文件功能(即spring.profiles.active),这将允许控制通过JVM参数加载的属性文件。
  • 如果您仍想将所有内容保存在单个文件中,则可以覆盖PropertyPlaceholderConfigurer以从JVM参数获取env详细信息或默认为某个值

在安全问题上,一种方法是将加密密码存储在prop文件中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM