你如何修改java属性文件中的值
Posted
技术标签:
【中文标题】你如何修改java属性文件中的值【英文标题】:How do you modify values in java properties file 【发布时间】:2016-02-27 02:41:18 【问题描述】:我有一个 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 检索值。 我的问题是如何让 Spring 的环境对象在本地运行时选择本地属性,而在 dev 上运行时选择开发属性?此外,保存敏感数据听起来也不对,例如生产数据库连接 属性文件中的详细信息将在代码库中浮动。那么在生产环境中如何添加生产细节呢?理想情况下,我想在我喜欢的时候更改它们,而不必重新部署应用程序。我的方向正确吗?
注意 - 我在 SO 上看到的所有答案都讨论了在 Java 代码中更改这些属性。我不想这样做,我希望能够独立于应用程序代码配置这些值。
谢谢
【问题讨论】:
我不是这方面的专家。但我认为你可以使用Maven profiles 来面对这个问题——每个人都有一个配置文件。 【参考方案1】:您可以查看spring profiles 来为特定环境加载特定文件。
或者,您还可以使用 JNDI 属性或容器中设置的环境属性,对应用程序上下文中加载属性的文件进行参数化。
例子:
<context:property-placeholder ignore-unresolvable="true" location="$env.config.file:classpath*:META-INF/spring/profiles/dev/dev.properties" />
env.config.file 可以在启动时使用 -Denv.config.file= 在容器级别(比如 Tomcat)设置。通过这样做,Spring 会自动在系统 props 中找到该属性并替换它。如果您没有显式设置它(例如,在您可能使用其他容器的 dev 中,例如 jetty),它将使用给定的默认值(在本例中为 dev.properties)。
通过将属性文件放在war/ear之外,可以随意更改,只需要重启上下文即可。或者,您可以查看可重新加载的属性占位符。如果您不想将密码存储在战争中,这也很有帮助。
要对属性文件中的信息进行加密,如果您使用的是 Spring 3,还可以查看:http://www.jasypt.org/spring3.html。
【讨论】:
【参考方案2】:对于选择 env 特定值,您有几个选项
如果您可以基于 env 创建多个属性文件,那么您可以使用 Spring 配置文件功能(即 spring.profiles.active),这将允许控制属性文件通过 JVM 参数加载。 如果您仍想将所有内容保存在单个文件中,则可以覆盖 PropertyPlaceholderConfigurer 以从 JVM 参数中获取环境详细信息或默认为某个值在安全问题上,一种方法是将加密的密码存储在prop文件中。
【讨论】:
以上是关于你如何修改java属性文件中的值的主要内容,如果未能解决你的问题,请参考以下文章
java中如何读取xml中数据。多节点的。给我一个例子,谢谢。