Solon

使用分布式配置服务

</> markdown

生态 / Solon Cloud Config [传送]

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(),做为应用配置的一个部分,且会实时同步配置变更(可能会晚几秒)。另外,也可使用 @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
@Inject对应的是 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