专栏名称: 聊聊架构
在这里煮酒聊架构。
目录
相关文章推荐
51好读  ›  专栏  ›  聊聊架构

配置一次,到处运行,将配置与运行时解耦!

聊聊架构  · 公众号  · 架构  · 2016-12-09 15:08

正文

请到「今天看啥」查看全文


  • 一套完整统一的API,可用于基于编程或注解方式的配置访问,适用于Java SE和EE环境;

  • 支持像Spring和OSGi这样的框架;

  • 支持动态增强(允许我们引入额外的属性源);

  • 过滤可访问的key/value,这种过滤可以按照单个属性来进行,也可以按照完整的配置来进行。这样的话,就允许key和value进行变更(例如,密码要进行掩码处理)、省略或添加。或者,我们也可以基于访问控制列表来进行访问的限制;

  • 默认情况下,配置会组织成PropertySource的有序列表,每个PropertySource都会有一个顺序值。PropertySource可以提供任意类型的属性,比如系统属性、环境属性、基于文件的属性,以及任意种类的来源和格式。具有较高顺序值的PropertySource将会覆盖(默认情况下)具有较低顺序值的PropertySource所提供的属性条目(每个PropertySource会实现针对某种资源的映射);

  • 正如前面所介绍的,针对相同的key,重要性较高的值(由具有较高顺序值的PropertySource所提供的值)会覆盖掉重要性较低的值。但在有些场景下,由用户来自定义行为会更加合适,为了支持这些场景,我们允许用户自定义联合策略,从而实现更为灵活的覆盖机制。例如,在配置 List 值的时候,我们可以定义一种行为来联合两个值 “a, b” “c, d, e” ,从而形成 “a, b, c, d, e”

  • 在配置文件中,支持占位符,例如 ${sys:a.sys.property}、${url:config.server:8090/v1/a.b.c}、${conf:cross.ref}

  • 支持多种配置格式,比如Yaml、Json、属性文件等;

  • 能够与各种新的、特定的配置后端集成,比如etcd和Consul;

  • 支持动态和灵活的资源定位,例如在数据库中、在Consul或etcd中、在文件中等;

  • 支持动态的配置处理、事件以及可变配置。

尚未发布的特性包括(计划在0.3-incubating版本会涵盖):

  • 支持配置使用度量;

  • 支持配置校验和文档化,例如为CLI -help命令行生成输出;

  • 便于使用的基于YAML的DSL;

  • 用于可视化和管理配置的Web组件。

接下来,让我们看一下“配置一次,到处运行”的一些样例。使用Tamaya来实现可配置的组件通常会包含如下步骤:

  • 组件的实现;

  • 决定可配置的方面;

  • 定义key以及合理的默认值,从而能够支持“约定优于配置”;

  • 将提供集成功能的Tamaya库添加到你的目标运行时环境中,这种环境可能是Java EE servlet容器或Spring Boot应用;

  • 通过硬编码的默认值来使用组件,随后可以通过正常的实现类来运行,不需要任何额外的配置。借助Tamaya,可以文档化和观察我们的配置,通过添加某项简单的依赖,我们就可以指定生效的文件格式或配置后端。

实现SupportContact类

我们来考虑一个简单的样例:假设我们正在构建一个组件,这个组件能够提供某个应用的售后支持通讯录信息。 SupportContact 组件的定义如下所示:

为了配置这个类,我们可以实现一个构造器来执行配置逻辑:







请到「今天看啥」查看全文