[转] 配置文件解析利器-Config库

[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.   
  4.     public Configure(String confFileName) {  
  5.         config = ConfigFactory.load(confFileName);  
  6.     }  
  7.   
  8.     public Configure() {  
  9.         config = ConfigFactory.load();  
  10.     }  
  11.   
  12.     public String getString(String name) {  
  13.         return config.getString(name);  
  14.     }  
  15. }  

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.   
  4. //a.withFallback(b)  a和b合并,如果有相同的key,以a为准  
  5. Config finalConfig = firstConfig.withOnlyPath("host").withFallback(secondConfig);  

finalConfig中的配置是test1.conf中的host节点的所有配置与test2.conf所有节点的配置合集。

posted @ 2018-06-12 12:10  Pekkle  阅读(598)  评论(0编辑  收藏  举报