使用分布式配置服务
1、情况简介
分布式配置服务,也可叫云端配置服务。
- 主要通过 CloudConfigService 接口进行适配
- 使用 CloudClient.config() 获取适配实例
- 一般通过通过配置和 @CloudConfig 注解进行使用
目前适配有:local, water, consul, nacos, zookeeper, polaris 等
2、简单演示
2.1、配置
solon.app:
group: "demo" #同时也会做为配置分组
name: "demoapp"
solon.cloud.water:
server: "waterapi:9371"
config:
load: "demoapp.yml,demo2:test-ds" #默认加载一个配置到应用属性。多个以','隔开,跨分组时用{group:key}格式
2.2、注入配置
通过 config.load 加载的配置会直接转到 Solon.cfg(),做为应用配置的一个部分,且会实时同步配置变更(可能会晚几秒)。可用 @Inject
注入。
另外,也可使用 @CloudConfig
直接注解配置块。
@Configuration
public class Config {
//由 config.load 加载的配置,会到应用属性里
@Inject("${demo.user}")
UserModel userModel;
//注入用户名
@CloudConfig("demo-user-name")
String userName;
//注入并转为数据源
@Bean
public DataSource ds(@CloudConfig("demo-ds") HikariDataSource ds){
return ds;
}
}
2.3、使用接口手动获取,一般不用(太原生了)
Config cfg = CloudClient.config().pull("demo-user-name"); //使用 {solon.app.group} 组
Config cfg = CloudClient.config().pull("demo2","demo-user-name");
2.4、通过订阅配置变更
//配置订阅:关注配置的实时更新
@CloudConfig("demoDb")
public class TestConfigHandler implements CloudConfigHandler {
@Override
public void handler(Config config) {
}
}
3、@CloudConfig 与 @Inject 的区别(以 naocs 为例)
- 区别
注解 | 说明 |
---|---|
@CloudConfig("dataId") | 对应的是 dataId |
@Inject("{prop-name}") | 对应的是 Solon.cfg() 里的配置 |
- "config.load" 配置的作用
可以把 dataId 对应的配置,加载到 Solon.cfg()。从而可以使用 @Inject 注入配置。
4、会自动更新的配置
- "config.load" 配置的 key
- "@CloudConfig(autoRefreshed = true) " 注入的 key
- "@CloudConfig CloudConfigHandler" 订阅的 key
代码演示:
https://gitee.com/noear/solon-examples/tree/main/9.Solon-Cloud