【问题标题】:Externalizing DEFAULT configuration properties外部化 DEFAULT 配置属性
【发布时间】:2013-02-06 09:25:43
【问题描述】:

很多项目都在使用配置文件和 我发现了很多帖子如何阅读此配置文件,如何将它们外部化,但我找不到有关如何生成示例配置文件的任何信息。

例如,如果您有一个包含各种配置属性的 company.config 文件,我希望自动生成一个 company.sample.config 文件每次构建项目时从我的源代码中获取。此示例文件应包含项目使用的所有配置属性,以及默认值和 cmets。

我使用 Java 和 Gradle,所以我正在考虑一个 Gradle 插件。

那里有这样的东西吗?其他人是如何解决这个问题的?


稍后编辑:一些例子:


public class CompanyConfig {
private static final String PROPERTY1_DEFAULT = "Company.property1_default";
private static final String PROPERTY2_DEFAULT = "Company.property2_default";

/**
 * description 1
 */
private static final String PROPERTY1 = "Company.property1";
/**
 * description 2
 */
private static final String PROPERTY2 = "Company.property2";

private Config config;

public CompanyConfig(Config config) {
    this.config = config;
}

public String getProperty1() {
    return config.getProperty(PROPERTY1, PROPERTY1_DEFAULT);
}

public String getProperty2() {
    return config.getProperty(PROPERTY2, PROPERTY2_DEFAULT);
}
}

根据上述代码,sample.conf 文件应如下所示:

**description 1
*Company.property1=Company.property1_default

**description 2
*Company.property2=Company.property2_default

这样,我可以把sample.conf文件交给想配置项目的人。这个人不知道我项目中的配置属性,所以他/她需要一个属性列表和每个属性的默认值。而且由于引入了新的人员并删除了其他一些人员,因此必须在每次构建时生成示例文件。

希望这能澄清我在这里问的问题。

【问题讨论】:

  • 标准 java.util.Properties 提供了一种将 Properties 实例写入带有注释的 OutputStream 的方法(请注意,不是每个属性的注释)。
  • 我想要一些自动的东西:解析我的代码并提取属性名称和默认值。这必须是某种插件。
  • 如何识别代码中的所有配置属性?
  • 嗯,这就是问题所在。我在考虑注解或一些约定:Config 类应该有一个特定的模式(ConfigImpl),并且字段也应该有一个特定的模式(_Property)......或者像这样。可能还有其他解决方案。

标签: java properties groovy configuration-files gradle


【解决方案1】:

您可以借助 ant 构建脚本。参考下面的代码。

<project>
<target name="default">



<propertyfile file="company.sample.config" comment="sample properties here.">

<entry key="program.AUTHOR" default="RAIS" />
<entry key="program.COMPANY" default="IGT" />
<entry key="program.COPYRIGHT" default="now" type="date" pattern="yyyy" />
<entry key="program.DESCRIPTION" default="" />
<entry key="program.VERSION" default="1.0.0" />
<entry key="program.BUILDNUM" value="1" />
<entry key="program.BUILDDATE" type="date" value="now" pattern="yyyyMMDDHHmmss" />
</propertyfile>

</target>
</project>

【讨论】:

  • 好的。我会更详细一点。可能我是将军?
  • 是我回答了你的问题还是你正在寻找其他东西。
  • 我编辑了我的问题以更好地反映我的需要。你的回答不符合我的要求。
  • 您是否正在使用任何工具,例如 ant 或 maven 来构建您的应用程序。
【解决方案2】:

我不知道有什么插件可以做到这一点,但如果你有一个不错的配置系统,那么它应该不难做到。例如,我使用基于 JSON 的配置系统:配置文件是一个简单的 JSON 文档,它直接映射到配置对象。要生成具有默认值的示例配置,您只需实例化基础对象并要求 JSON 将其写出,这是一个五行程序,可以轻松添加到构建脚本中。

【讨论】:

  • 每个字段的 cmets 怎么样?我现在使用的配置是apache.commons.configuration。
  • 不了解 Apache,我会坚持使用基于 JSON 的解决方案并编写自定义编写器来从每个字段中提取 cmets。多一点努力,但不要太多。
  • JSON 方法的问题在于您没有备用策略。 Apache 解决方案为您提供了配置项目的强大功能:基于生命周期具有不同优先级的不同配置文件、获取优先级列表中的系统环境的可能性等
  • 没错。在我的环境中工作正常,我个人认为在多个地方进行配置是一件坏事,但如果你需要或依赖它,那么这将无济于事。对不起!
猜你喜欢
  • 2017-08-14
  • 1970-01-01
  • 1970-01-01
  • 2018-10-25
  • 2017-08-18
  • 1970-01-01
  • 1970-01-01
  • 2012-07-13
  • 2018-10-03
相关资源
最近更新 更多