首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java生成软件配置

Java生成软件配置
EN

Stack Overflow用户
提问于 2012-02-01 19:51:25
回答 4查看 367关注 0票数 3

我正在做一个项目,其中有一些.properties配置文件的数据源,MQ和其他一些东西。我们也有启动shell脚本和用户配置文件脚本。我面临的问题是,我们实际上在5个不同的环境中部署了这个软件,当然每个环境的配置都是不同的。使用这种配置来维护大约30个纯文本文件有点困难。它们中的大多数几乎是相等的,就像shell脚本一样,它们只有一些不同的路径引用。

你们知道有什么工具可以集成到我们的构建脚本中,可以从单个文件或嵌入式数据库中获取这些属性,然后生成适当的环境配置吗?如果它也能生成脚本,那就更有趣了。

谢谢

EN

回答 4

Stack Overflow用户

发布于 2012-02-01 19:55:06

Maven提供了开箱即用的功能:http://maven.apache.org/guides/mini/guide-building-for-different-environments.html

票数 1
EN

Stack Overflow用户

发布于 2012-02-02 04:53:39

我是Config4*的维护者,它是C++和Java风格的配置文件解析器库。Config4*配置文件中的大部分内容都是name=value语句,但您可以引用环境变量和执行某些命令(如hostname )的标准输出。您还可以在配置文件中使用if-then-else语句。例如(关键字前缀为"@"):

代码语言:javascript
复制
@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 )的存在来调整其内容的配置文件。例如:

代码语言:javascript
复制
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}'来指定应在何处使用配置文件中的值。然后编写一个小型实用程序,该应用程序读取模板文件和配置文件,执行所需的替换,然后将转换后的文件写入磁盘。您可以从构建系统中运行该实用程序。

票数 0
EN

Stack Overflow用户

发布于 2012-02-02 05:08:14

您可以看看最新发布的tools4j-config,它允许您在运行时而不是构建时处理配置。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9095299

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档