管理配置数据的最佳方法是什么

She*_*har 28 java modularity configuration-management

我正在开发一个有4个产品的产品套件.现在,所有配置数据都在XML或属性文件中.这种方法是不可维护的,因为我们必须管理不同环境的不同配置文件(例如生产,开发等).

那么,处理配置数据的最佳方法是什么?

另外,我们可以将其模块化为一个单独的模块吗?这样所有产品都可以使用这个模块.我们不想使用属性文件.我正在寻找一种解决方案,我们可以将所有配置特定代码作为新的配置模块移动,并将所有配置数据保存在数据库中.

Boz*_*zho 22

使用commons-configuration,您可以使用统一的API来访问属性,无论它们如何表示 - .properties,xml,JNDI等.例如:

config.properties:

jdbcHost=192.168.12.35
jdbcUsername=dbuser
jdbcPassword=pass
Run Code Online (Sandbox Code Playgroud)

config.xml:

<config>
   <jdbcHost>192.168.12.35</jdbcHost>
   <jdbcUsername>dbuser</jdbcUsername>
   <jdbcPassword>pass</jdbcPassword>
</config>
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,他们都可以通过以下方式访问:

String host = config.getString("jdbcHost");
Run Code Online (Sandbox Code Playgroud)

  • 我不确定,但我觉得这不能解决OP的问题.OP似乎知道如何从XML或属性文件中检索值 - 但是在维护多组配置文件时遇到了问题. (8认同)

Nic*_*ole 12

你几乎就在那里......我将保持你的方法相同,并为通过类似于以下任一方法的方法运行的应用程序实例提供正确的配置文件:

  1. 以不同的方式命名所有配置文件,让应用程序通过一些独特的标准(用户名,主机名等)将它们引入:

    • 生产 .properties
    • developer1 .properties
    • developer2 .properties
  2. 根据应用程序假定存在的环境变量,将它们保留在代码库之外的位置:

    • YOURAPP_CONFIG_DIR /server_config.xml
    • YOURAPP_CONFIG_DIR /database_config.properties

我甚至在同一个项目中使用了这些方法的组合(构建过程配置为#1,运行时配置为#2).


Tom*_*vic 5

如果您的应用程序使用数据库,则可以创建"配置"表,如下所示:

create table configuration (mode char(3), key varchar(255), value varchar(1023));
Run Code Online (Sandbox Code Playgroud)

您可以使用init脚本初始化它,例如init.sql,内容如下:

insert into configuration values ('pro', 'param1', 'value1'); -- production
insert into configuration values ('dev', 'param1', 'value1'); -- development
insert into configuration values ('tst', 'param1', 'value1'); -- testing
...
Run Code Online (Sandbox Code Playgroud)

这种方法的好处如下:

  • 您将脚本与代码一起编辑
  • 您可以通过添加用户/组ID轻松扩展它以包括每用户或每组设置
  • 如果需要,可以在运行时更改设置
  • 您可以使用通常用于处理核心应用程序数据来处理配置数据的相同堆栈(JPA + DAO,Cayenne ...)

  • 您如何阅读配置参数以连接到数据库?:-) (8认同)