1. 程式人生 > >[轉] 配置文件解析利器-Config庫

[轉] 配置文件解析利器-Config庫

boa test com tail with pri 配置 itl alt

[From] https://blog.csdn.net/zero__007/article/details/51493851

Typesafe的Config庫,純Java寫成、零外部依賴、代碼精簡、功能靈活、API友好。支持Java properties、JSON、JSON超集格式HOCON以及環境變量。

[java] view plain copy
  1. public class Configure {
  2. private final Config config;
  3. public Configure(String confFileName) {
  4. config = ConfigFactory.load(confFileName);
  5. }
  6. public Configure() {
  7. config = ConfigFactory.load();
  8. }
  9. public String getString(String name) {
  10. return config.getString(name);
  11. }
  12. }

ConfigFactory.load()會加載配置文件,默認加載classpath下的application.conf,application.json和application.properties文件。當然也可以調用ConfigFactory.load(confFileName)加載指定的配置文件。

配置內容即可以是層級關系,也可以用”.”號分隔寫成一行:

[java] view plain copy
  1. host{
  2. ip = 127.0.0.1
  3. port = 2282
  4. }

或則

[java] view plain copy
  1. host.ip = 127.0.0.1
  2. host.port = 2282

即json格式和properties格式。(貌似*.json只能是json格式,*.properties只能是properties格式,而*.conf可以是兩者混合,而且配置文件只能是以上三種後綴名)

如果多個config 文件有沖突時,解決方案有:
1. a.withFallback(b) //a和b合並,如果有相同的key,以a為準
2. a.withOnlyPath(String path) //只取a裏的path下的配置
3. a.withoutPath(String path) //只取a裏出path外的配置
例如:

[java] view plain copy
  1. Config firstConfig = ConfigFactory.load("test1.conf");
  2. Config secondConfig = ConfigFactory.load("test2.conf");
  3. //a.withFallback(b) a和b合並,如果有相同的key,以a為準
  4. Config finalConfig = firstConfig.withOnlyPath("host").withFallback(secondConfig);

finalConfig中的配置是test1.conf中的host節點的所有配置與test2.conf所有節點的配置合集。

[轉] 配置文件解析利器-Config庫