1

我的 .properties 文件中有以下内容:

connection1.username=${cloud.db.username}
connection1.password=${cloud.db.password}

我想在运行/调试配置中传递这些变量

我认为我需要做的就是在 JVM 命令行中传递以下参数:-Dcloud.db.username=JOHN -Dcloud.db.password=SECRET.

但在代码调用中Properties.getProperty()仍然返回${cloud.db.username}.

我在 IntelliJ IDEA 下将它作为 junit 运行。

4

4 回答 4

4

使用 -D 将属性传递到 jvm 会将它们放入系统属性中(通过 System.getProperties() 访问)。

从代码中的文件创建 java.util.Properties 可为您提供一组完全独立的属性。

许多应用程序允许您通过命令行 -D 选项和在文件中指定属性。为此,他们必须在两者之间实现某种回退机制,并决定哪一个获得优先权。

此外,一些应用程序允许您将属性定义为引用另一个属性,它们通常通过扩展或包装 java.util.Properties 来实现。

您期望这两个东西都能正常工作,但 Java 都没有提供开箱即用的功能。

如果您想实现这些功能,请查看一些支持它们的开源项目。

于 2012-08-03T22:46:19.187 回答
2

我不完全明白你为什么要做这样的事情。如果您没有真正使用它,为什么需要属性文件中的这些值?

如果您想将这两个参数作为自定义命令行参数 (-D) 传递,那么您不能这样做:

System.getProperty("cloud.db.username");
System.getProperty("cloud.db.password");
于 2012-08-03T22:28:23.963 回答
1

的值connection1.username将始终为"${cloud.db.username}",java 不会将其替换为另一个属性或环境变量的值。

如果您想要这样的替换,那么您必须实现它(遍历属性对象的整个值集并替换所有与此模式匹配的值与引用的属性的值)

于 2012-08-03T22:36:57.733 回答
0

尝试通过访问System.getProperty(...)它们

于 2012-08-03T22:28:40.683 回答