Solon Cloud —— 服务配置

说明

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

接下来的服务配置和服务注册,我们使用的是 Nacos2。 需要自己部署好 Nacos2 ,具体内容可以参看 Nacos 的官网 https://nacos.io/docs/latest/quickstart/quick-start。

依赖

添加 nacos2 的依赖 org.noear:nacos2-solon-cloud-plugin

dependencies {
    implementation platform(project(":demo-parent"))

    implementation("org.noear:solon-web")
    implementation("org.noear:solon-logging-logback")
    implementation("org.noear:solon-openapi2-knife4j")
    implementation("org.noear:nacos2-solon-cloud-plugin")

    annotationProcessor("org.mapstruct:mapstruct-processor:${mapstructVersion}")

    testImplementation("org.noear:solon-test-junit5")
}

配置

Nacos2 插件已经做了些默认值,所以我不需要过多的配置即可连接到 nacos 配置中心。

solon.app:
  name: "demo-cloud-config"
  # group: "DEFAULT_GROUP" # 默认值为 DEFAULT_GROUP
  # namespace: "public" # 默认值为 public

solon.cloud.nacos:
  server: "localhost:8848"
  config:
    load: "demo-cloud-config.yml"

load 使用group:dataId的格式加载配置配置文件,当加载的配置文件与 solon.app.group 配置的 group 一致时可以不用配置 group 的部分,也就是只需要 dataId 的部分即可。如果需要加载多个配置文件,使用逗号(,)分隔,加载多个配置文件通用配置特别有用,避免了在多个地方管理配置文件。

通过 load 加载的配置文件会进入 Solon.cfg() 成为应用配置,这样就可以通过 @Injtect 的方式进行注入。

以下是一份更详细的配置,内容来自官网 https://solon.noear.org/article/400 ,可以根据实际的需要进行配置。

solon.app:
  name: "demoapp"
  group: "demo"
  meta:                   #添加应用元信息(可选)
    version: "v1.0.2" 
    author: "noear"
  tags: "aaa,bbb,ccc"     #添加应用标签(可选)

solon.cloud.nacos:
  server: "localhost:8848,localhost:8847"  #nacos 服务地址
  namespace: "3887EBC8-CD24-4BF7-BACF-58643397C138" #nacos 命名空间
  contextPath: "nacosx"                    #nacos 服务的上下文路径(可选)
  username: "aaa"
  password: "bbb"
  config:
    load: "demoapp.yml,group:test.yml"                #加载配置到应用属性(多个以","隔开)
  discovery:
    clusterName: "DEFAULT"

获取配置

使用 nacos 的配置是期望获取统一的,动态的配置,所以这里开启自动刷新 autoRefreshed = true

package com.example.demo.solon.config;

import java.io.Serializable;
import lombok.Data;
import org.noear.solon.annotation.Configuration;
import org.noear.solon.annotation.Inject;

/**
 * @author airhead
 */
@Configuration
@Inject(value = "${app}", autoRefreshed = true)
@Data
public class AppConfig implements Serializable {
  private String appId;
  private String appKey;
}

接下来就是通过 @Injtect 的方式进行注入使用对应的配置。

@Api("配置管理")
@Controller
@Mapping("/config")
public class DemoController {
  @Inject private AppConfig appConfig;
 
 }

获取配置文件

获取配置文件根据 dataId 获取配置,通过 @CloudConfig 进行注入。CloudConfig 暂时不支持注解的类上,也就是不能使用如下的方法配合 @Inject 进行注入。

package com.example.demo.solon.config;

import java.io.Serializable;
import lombok.Data;
import org.noear.solon.annotation.Configuration;
import org.noear.solon.cloud.annotation.CloudConfig;

/**
 * 通过类获取dataId的配置,暂不支持的。
 *
 * @author airhead
 */
@Configuration
@CloudConfig(value = "demo-db", autoRefreshed = true)
@Data
public class DemoDbConfig implements Serializable {
  private String url;
  private String username;
  private String password;
}

@Inject 暂时暂时不到值的。

@Api("配置管理")
@Controller
@Mapping("/config")
public class DemoController {
  /** 获取dataId的配置,获取不到值 */
  @Inject private DemoDbConfig demoDbConfig;
}

正确的方式是,把 CloudConfig 注解在属性上。

public class DemoController {
  /** 获取dataId的配置,获取不到值 */
  @Inject private DemoDbConfig demoDbConfig;

  @Inject private AppConfig appConfig;

  @CloudConfig(value = "demo-db", autoRefreshed = true)
  private Properties properties;

  @CloudConfig(value = "demo-db", autoRefreshed = true)
  private DemoDbConfig demoDbConfig2;
 
 }

验证

通过 Swagger 测试可以正常获取到配置,并且修改 Nacos 的配置后,再次调用接口配置会更新(这里没有截图)。

Solon Cloud —— 服务配置_第1张图片

小结

在 Solon Cloud 中通过简单的配置就可以使用 Nacos 配置中心了。在实际的使用过程中注意区分@Inject 和@CloudConfig 的不同,一个是针对key来的,一个是针对dataId来的。为了减少自己在开发过程中的混乱(有时过多的选择不是一件好事情),可以约定使用 load 的方式加载多个配置文件,使用 @Inject 的方式进行注入后使用。

你可能感兴趣的:(Solon,Solon,实用教程,java)