OWNER支持配置文件目录的继承
OWNER支持配置文件目录的继承
ChanningBJ 发表于1年前
OWNER支持配置文件目录的继承
  • 发表于 1年前
  • 阅读 10
  • 收藏 0
  • 点赞 0
  • 评论 0

新睿云服务器60天免费使用,快来体验!>>>   

摘要: OWNER 是一个开源项目,旨在解决Java配置文件的解析问题。为了解决Owner配置文件定义的继承问题,我提交了一个patch支持这个功能,本文简要介绍了这个新feature。

什么是OWNER

OWNER 是一个开源项目,旨在解决Java配置文件的解析问题。

例如配置文件 /data/config.properties 包含下列内容:

server.port=80
server.hostname=foobar.com
server.max.threads=100

为了解析这个配置文件,我们首先定义一个Java接口:

import org.aeonbits.owner.Config;

@Sources({ //定义配置文件的路径
     "file:/data/config.properties",
     "classpath: config.properties" 
})    
public interface ServerConfig extends Config {
    @Key("server.port")
    int port();

    @Key("server.hostname")
    String hostname();

    @Key("server.max.threads");
    @DefaultValue("42")
    int maxThreads();
}

加载配置文件:

ServerConfig cfg = ConfigFactory.create(ServerConfig.class);
System.out.println("Server " + cfg.hostname() + ":" + cfg.port() +
                   " will run " + cfg.maxThreads());

配置文件路径的继承

在实际应用中,配置文件内容上一般会包括多个分组,每一个分组定义成一个接口会更加清晰,同时所有的接口需要从相同的配置文件列表中加载。例如除了上面例子中展示的server配置以外,还要定义mysql的信息,就需要添加一个接口并重新定义Sources :

import org.aeonbits.owner.Config;

@Sources({ //定义配置文件的路径
     "file:/data/config.properties",
     "classpath: config.properties" 
})    
public interface MysqlConfig extends Config {
    @Key("mysql.port")
    int port();

    @Key("mysql.hostname")
    String hostname();
}

由于Sources这个annonation不支持继承,所以每次新添加一组配置项的时候就需要重写一遍Sources,这样一来容易出错并且以后修改配置文件路径的时候多有不便。我提交了一个patch解决了这个问题,已经merge到master,针对这种情况就可以这样写了:

import org.aeonbits.owner.Config;

@Sources({ //定义配置文件的路径
     "file:/data/config.properties",
     "classpath: config.properties" 
})    
public interface BaseConfig extends Config {
    
}
import org.aeonbits.owner.Config;

public interface ServerConfig extends BaseConfig {
    @Key("server.port")
    int port();

    @Key("server.hostname")
    String hostname();

    @Key("server.max.threads");
    @DefaultValue("42")
    int maxThreads();
}
import org.aeonbits.owner.Config;

public interface MysqlConfig extends BaseConfig {
    @Key("mysql.port")
    int port();

    @Key("mysql.hostname")
    String hostname();
}
标签: owner Java 配置文件
  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
ChanningBJ
粉丝 7
博文 71
码字总数 9621
作品 4
×
ChanningBJ
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: