我正在做一个项目,其中有一些.properties配置文件的数据源,MQ和其他一些东西。我们也有启动shell脚本和用户配置文件脚本。我面临的问题是,我们实际上在5个不同的环境中部署了这个软件,当然每个环境的配置都是不同的。使用这种配置来维护大约30个纯文本文件有点困难。它们中的大多数几乎是相等的,就像shell脚本一样,它们只有一些不同的路径引用。
你们知道有什么工具可以集成到我们的构建脚本中,可以从单个文件或嵌入式数据库中获取这些属性,然后生成适当的环境配置吗?如果它也能生成脚本,那就更有趣了。
谢谢
发布于 2012-02-01 19:55:06
Maven提供了开箱即用的功能:http://maven.apache.org/guides/mini/guide-building-for-different-environments.html。
发布于 2012-02-02 04:53:39
我是Config4*的维护者,它是C++和Java风格的配置文件解析器库。Config4*配置文件中的大部分内容都是name=value语句,但您可以引用环境变量和执行某些命令(如hostname )的标准输出。您还可以在配置文件中使用if-then-else语句。例如(关键字前缀为"@"):
@if (exec("hostname") @in ["host1", "host2", "host3"]) {
... # set variables to values for production environment
} @elseIf (exec("hostname") @in ["host4", "host5", "host6"]) {
... # set variables to values for staging environment
} @else {
@error "Unknown host";
}我称这种配置为可适应配置,因为单个配置文件可以根据不同的主机、用户名等调整其内容。Config4*提供了一种将命令行选项与配置文件集成的简单方法,因此可以根据命令行选项(如-env production或-env staging )的存在来调整其内容的配置文件。例如:
env ?= ""; # set by a command-line option
if (env == "production") {
... # set variables to values for production environment
} @elseIf (env == "staging") {
... # set variables to values for staging environment
} @else {
@error "You must specify '-env production' or '-env staging' as a command-line option";
}我可以想到两种可能的方式,Config4*可能会对您有所帮助。
一种选择是将Config4*解析器嵌入到应用程序中。然而,尽管我认为这是开发新应用程序时的好方法,但我认为将Config4*改造到现有应用程序可能会很繁琐(不是因为Config4*很难使用,而只是因为您将修改使用Java属性API或XML API的现有代码以使用不同的API,而这样的修改往往很繁琐)。
第二个选项更适合您问题的具体情况。您可以编写shell脚本和属性文件的模板版本。这些模板文件将使用特定的语法,例如'${variable.name}'来指定应在何处使用配置文件中的值。然后编写一个小型实用程序,该应用程序读取模板文件和配置文件,执行所需的替换,然后将转换后的文件写入磁盘。您可以从构建系统中运行该实用程序。
发布于 2012-02-02 05:08:14
您可以看看最新发布的tools4j-config,它允许您在运行时而不是构建时处理配置。
https://stackoverflow.com/questions/9095299
复制相似问题