3

我们有一种情况,config.properties在我们的构建过程中调用了十几个文件:

  • config.properties.dev
  • config.properties.qa
  • config.properties.prod1
  • config.properties.prod2

我们当前的安装过程config.properties将该环境的 复制到config.properties. (我对此并不感到兴奋,但这是我现在必须处理的。)

除了三个或四个属性外,所有这些文件都完全相同。不幸的是,这些在所有文件中并不总是相同的属性。我们想要做的是像这样设置一个主人 config.properties

掌握config.properties

prop1 = value1
prop2 = value2
prop3 = value3
prop4 = value4

然后为每个环境有一个单独的`config.properties,其中只包含与主服务器不同的属性:

config.properties.prod

prop3 = value3.1
prop4 = value4.1

config.properties.qa

prop2 = value2.1
prop3 = value3.2

我们认为在进行部署时可以将这两个文件连接在一起:

cat config.properties.$env >> config.properties

并以这种方式获取组合属性文件:

结合config.properties

prop1 = value1
prop2 = value2
prop3 = value3
prop4 = value4
prop2 = value2.1
prop3 = value3.2

不幸的是,我们不知道 Java 如何处理这样的文件。它是第一个定义的属性,还是最后一个定义的属性,或者行为完全未定义?

如果这不起作用,在配置脚本(通常是 BASH 脚本)中将多个属性组合到单个属性文件中的最佳方法是什么?

4

2 回答 2

1

正如@home 提到的,属性是一个地图,所以最后一个(文件中的最后一个)获胜。

但是,在我看来,在合并文件时解析正确的值会更好,这样结果就具有每个属性的一个实例。这样,一旦使用了属性文件,就无需猜测了。

当然,如何解决这些问题取决于您。

于 2013-01-08T17:54:24.373 回答
0

您还可以查看 apache commons-configuration 项目。它具有内置功能来组合不同的配置文件。

于 2013-01-08T18:16:31.537 回答