為什麼設計 DuiC
在工作中我們時常要根據不同環境配置不同的引數,讓專案的靈活性、可用性變得更高,那靈活的配置就變得必不可少,雖然目前已經存在很多配置管理解決方案,但是管理方式侷限性大,適應範圍窄。
DuiC 在設計初就考慮到配置的應用範圍,將配置獲取方式設計為 RESTful API 的方式,可支援任何伺服器端,客戶端以及 WEB 輕鬆獲取配置。其次 DuiC 管理配置統一採用 YAML 的方式,並提供 WEB 編輯器及語法高亮,語法校驗等功能,降低配置修改的錯誤率。
DuiC 原始碼: https://github.com/zhudyos/duic
已實現的功能
- 檢查配置狀態
- 通過 key 獲取某個配置
- 通過 name/profile 獲取整體配置
- 多個 profile 配置深度合併
- 配置許可權管理
- 分散式配置管理
- 容器部署
Swagger 文件: https://app.swaggerhub.com/ap…
Docker 映象: https://hub.docker.com/r/zhud…
Java Client API
DuiC 提供 Java 客戶端 API 幫助你快速獲取配置,支援 Android/Java/JavaWeb/Spring 獲取配置同時支援熱載入配置。
duic-java-client:https://github.com/zhudyos/du…
Java/Android 使用
使用 API 提供的 ConfigUtils
工具包獲取配置。
建立 Config 例項並將設定為 ConfigUtils 的預設配置,使用。
Config config = new Config.Builder()
.baseUri("https://duic.zhudy.io/api/v1")
.name("hello")
.profile("world")
// .configToken("...")
// .reloadPlot(new ReloadPlot(10, TimeUnit.SECONDS)) // 過載
// .failFast(true) // 快速失敗
// .listener() // 配置載入監聽
.build();
ConfigUtils.setDefaultConfig(config);
Java Web 使用
使用 API 提供的 ConfigUtils
工具包獲取配置。
在 web.xml 中配置監聽器
<!-- 預設配置路徑 classpath:duic.properties -->
<context-param>
<param-name>duicConfigLocation</param-name>
<param-value>classpath:duic.properties</param-value>
</context-param>
<listener>
<listener-class>io.zhudy.duic.config.web.DuicConfigContextListener</listener-class>
</listener>
在 duic.properties 檔案中增加配置管理中心資訊
duic.base.uri=https://duic.zhudy.io/api/v1
duic.name=hello
duic.profile=world
duic.config.token=
duic.reload.period=10
duic.reload.unit=SECONDS
duic.fail.fast=false
# 多個 DuicListener 採用英文逗號(,)分隔
duic.listeners=xx.MyDuicListener
在 Spring 中使用
- 使用 API 提供的
ConfigUtils
工具包獲取配置 - 使用
@Value
的方式注入配置(推薦)
以上2種方式都支援熱載入,推薦使用 @Value
的方式注入配置,這種方式對於你的程式碼沒有任何的浸入性,支援 spring3.2 以上的版本使用。
-
使用註解的方式初始化
@Bean public static DuicConfigBeanFactoryPostProcessor duicConfigBeanFactoryPostProcessor() { DuicConfigBeanFactoryPostProcessor processor = new DuicConfigBeanFactoryPostProcessor(); processor.setBaseUri("https://duic.zhudy.io/api/v1"); processor.setName("hello"); processor.setProfile("world"); return processor; }
-
使用 XML 的方式初始化
<bean id="duicConfigBeanFactoryPostProcessor" class="io.zhudy.duic.config.spring.duicConfigBeanFactoryPostProcessor"> <property name="baseUri" value="https://duic.zhudy.io/api/v1"/> <property name="name" value="hello"/> <property name="profile" value="world"/> </bean>
注入配置
@Component
public class Example {
@Value("${k1.string}")
private String k1;
}
Spring Boot 支援
DuiC 也提供了 duic-spring-cloud-config-client 來支援 spring-boot,使用 DuiC 管理配置可以完全替代 spring-cloud-config。
duic-spring-cloud-config-client:https://github.com/zhudyos/du…
該工具包支援 @ConfigurationProperties
及 @Value
注入配置,同時也支援熱載入。
注意如果你使用 @ConfigurationProperties
注入配置並且想要熱載入配置需要配合使用 @RefreshScope
註解。
關於更多 @RefreshScope
的資料請檢視 spring-cloud 官方文件:https://cloud.spring.io/sprin…
使用示例在 bootstrap.yml 檔案中增加如下配置
spring:
application:
name: samples (1)
duic:
spring:
cloud:
config:
watch:
enabled: true (2)
initial_delay: 10000 (3)
fixed_delay: 10000 (4)
uri: https://duic.zhudy.io/api/v1 (5)
profile: first,second (6)
# token: [TOKEN] (7)
duic docker-compose
關於 DuiC 更加詳細的描述,可以檢視倉庫中在 readme。
線上演示平臺:https://duic.zhudy.io/index.html
e-mail: kevinz@weghst.com
password: 123456
大家可以使用線上演示平臺,嘗試使用其提供的 API 及 SDK。
友情提醒:伺服器配置較差,訪問速度可能不是很快,請體諒。