文档章节

OWNER支持配置文件目录的继承

ChanningBJ
 ChanningBJ
发布于 2017/02/12 20:33
字数 485
阅读 15
收藏 0

什么是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();
}

© 著作权归作者所有

共有 人打赏支持
ChanningBJ

ChanningBJ

粉丝 8
博文 71
码字总数 9621
作品 4
海淀
程序员
服务监控以及服务降级基础组件--java-meerkat

meerkat 是爱奇艺移动服务端团队开发的服务监控以及服务降级基础组件,主要为了解决调用外部接口的时候进行成功率,响应时间,QPS指标的监控,同时在成功率下降到预设的阈值以下的时候自动切...

ChanningBJ
2017/06/11
385
0
Unix File Permissions & ACLs in OS X(part 2)

Unix Permissions & ACLs in OS X part 2 这是第一部分的接续,再详述一下permissions的继承关系等问题。 上一篇到这里可以找到:Unix File Permissions and ACLs in OS X 或者: http://blog...

junwong
2012/03/09
0
0
使用 NVelocity 解析 PowerDesigner 的cdm文件

使用 NVelocity 解析 PowerDesigner 的cdm文件 使用powerdesign来进行数据库设计应该是设计者的首选了,而且现在的powerdesign做得越来越好,新版的11已经开始可以把实体和需求一一对应了。p...

长平狐
2012/10/23
235
0
linux下acl应用详解

简介 ACL是访问控制列表(Access Control Lists)的缩写,对于Unix系统, ACL是标准Unix文件属性(r,w)的附加扩展。ACL给予用户和管理员更好控制文件读写和权限赋予的能力,商业Unix和NTF...

jackjie2010
2012/06/01
0
0
Yarn Secure Container Executor配置简介

前面我们简单介绍了Hadoop资源管控简介,提到了目录的空间大小,目录文件个数,yarn任务内存等等资源的管控,如果我们想要对cpu进行控制就需要用到linux系统本身的cgroup。这时候就需要设置Y...

叁金
06/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

阿里P8架构师深度概述分布式架构

简介 作为一名架构师,我们要专业,要能看懂代码,及时光着臂膀去机房,也能独挡一面!及时同事搞不定问题,或者撂挑子,你也能给老大一个坚定的眼神:不怕,有我在!还能在会议室上滔滔不绝...

java知识分子
3分钟前
0
0
zabbix利用自带的模板监控mysql数据库

zabbix利用自带的模板监控mysql数据库                                     作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任。 有些东...

linjin200
10分钟前
0
0
当刷新的Sandbox后,需要重新发布社区

当刷新的Sandbox后,需要重新发布社区 然后在登录页面设置中选择login/forgot password

在山的那边
11分钟前
0
0
Ubuntu 镜像文件下载

https://www.ubuntu.com/download/desktop

15834278076
14分钟前
0
0
解决php -v查看到版本于phpinfo()打印的版本不一致问题

一般造成这种原因可能是升级或多版本 用php -v 和phpinfo()查出来版本不一致,怎么解决呢 编辑/etc/profile文件在最后一行添加一个环境变量: export PATH="/usr/local/php/bin:$PATH" 最后保...

xiaogg
15分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部