Solon v4.0.3

::xuantong-solon-cloud-plugin [国产]

</> markdown
2026年7月24日 上午1:41:50
<dependency>
    <groupId>cloud.xuantong</groupId>
    <artifactId>xuantong-solon-cloud-plugin</artifactId>
    <version>最新版</version>
</dependency>

1、描述

分布式服务治理扩展插件。基于玄同 2.0 适配的 Solon Cloud 插件,提供配置服务、服务注册与发现。

插件使用 Socket.D TCP 长连接接入玄同控制面,支持配置动态刷新和本地快照。控制面暂时不可用时,应用可以使用本地快照启动,并在连接恢复后自动同步最新配置。

开源仓库:https://gitee.com/wjw_system/xuantong

2、能力支持

云端能力接口说明备注
CloudConfigService云端配置服务支持 namespace、group、启动加载和动态刷新
CloudDiscoveryService云端注册与发现服务支持 namespace、group、服务注册、查询和订阅

配置发布和删除属于管理操作,请通过玄同控制台或管理 API 完成。

3、配置示例

solon.app:
  name: "demoapp"
  group: "DEFAULT_GROUP"

solon.cloud.xuantong:
  server: "127.0.0.1:8090"       # 玄同 2.0 Socket.D TCP 控制面地址
  namespace: "public"
  token: "${XUANTONG_ACCESS_TOKEN:}"
  config:
    load: "demoapp.yml"          # 加载配置到应用属性,多个使用逗号分隔
  discovery:
    enable: true                  # 不需要服务注册发现时设置为 false

更丰富的配置:

solon.app:
  name: "demoapp"
  group: "DEFAULT_GROUP"
  meta:                           # 应用元信息(可选)
    version: "v2.0.0"
    author: "demo"
  tags: "api,prod"               # 应用标签(可选)

solon.cloud.xuantong:
  # 多个玄同 Server 地址使用逗号分隔
  server: "10.0.0.11:8090,10.0.0.12:8090,10.0.0.13:8090"
  namespace: "prod"
  token: "${XUANTONG_ACCESS_TOKEN:}"
  config:
    enable: true
    load: "application.yml,db.yml"
  discovery:
    enable: true
    healthCheckInterval: "10s"

提醒:

  • 通过 config.load 加载的配置会进入 Solon.cfg(),可以使用 @Inject 注入;
  • 玄同使用 namespace + group + dataId 唯一确定一份配置;
  • config.load 未指定分组时使用 solon.app.group;需要指定其他分组时可写成 PAYMENT_GROUP:payment.yml
  • @CloudConfig 可通过 group 指定分组,留空时使用 DEFAULT_GROUP

4、代码应用

import org.noear.solon.Solon;
import org.noear.solon.annotation.SolonMain;

@SolonMain
public class DemoApp {
    public static void main(String[] args) {
        // 启用 discovery 后,Web 服务会在启动完成时自动注册
        Solon.start(DemoApp.class, args);
    }
}
import org.noear.solon.annotation.Controller;
import org.noear.solon.annotation.Mapping;
import org.noear.solon.cloud.annotation.CloudConfig;

import java.util.List;

@Controller
public class DemoController {
    // 基础类型配置;单例 Bean 可以使用 autoRefreshed 自动刷新
    @CloudConfig(name = "demo.title",
            group = "DEFAULT_GROUP",
            required = false,
            autoRefreshed = true)
    private String demoTitle;

    // JSON、YAML 等结构化配置可以注入为对象或集合
    @CloudConfig(name = "demo.channels",
            group = "DEFAULT_GROUP",
            required = false,
            autoRefreshed = true)
    private List<String> channels;

    @Mapping("/")
    public String test() {
        return demoTitle + ": " + channels;
    }
}

配置订阅,关注配置的实时更新:

import org.noear.solon.annotation.Component;
import org.noear.solon.cloud.CloudConfigHandler;
import org.noear.solon.cloud.annotation.CloudConfig;
import org.noear.solon.cloud.model.Config;

@Component
@CloudConfig(value = "demo.title", group = "DEFAULT_GROUP")
public class TestConfigHandler implements CloudConfigHandler {
    @Override
    public void handle(Config config) {
        System.out.println("配置变更: " + config.key() + " = " + config.value());
    }
}

5、演示项目