1. 实战配置中心

官方文档: https://github.com/alibaba/spring-cloud-alibaba/wiki/Nacos-config

Nacos提供用于存储配置和其他元数据的key/value存储,为分布式系统中的外部化配置提供服务器端和客户端支持。使用Spring Cloud Alibaba Nacos Config,可以在Nacos Server集中管理Spring Cloud 应用的外部属性配置。

在这里插入图片描述

先在nacos中添加如下信息:
在这里插入图片描述
Data ID: com.tulingmall.order
Group: DEFAULT_GROUP
内容: user.name=徐庶
user.age=11

首先添加依赖

<dependency>
      <groupId>com.alibaba.cloud</groupId>
      <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

启动类代码
在这里插入图片描述

配置中心需要使用bootstrap.yml 这里进行的是Nacos Config

注意:这里bootstrap.yml 中的spring.application.name要和Nacos中的配置中心的DataID一致
在这里插入图片描述

结果:
在这里插入图片描述


在这里插入图片描述
在这里插入图片描述

1.1 新建配置

在这里插入图片描述

DataID: 就可以理解为是配置文件的名称。
在这里插入图片描述
在这里插入图片描述
Group: 一般是某个项目

2. nacos-config扩展信息

Nacos客户端默认是properties格式信息。通过config:file-extension:yaml改为格式为yaml
在这里插入图片描述

2.1 可支持profile粒度的配置,就是 spring.profiles.active={profile}

在这里插入图片描述

spring-cloud-starter-alibaba-nacos-config 在加载配置的时候,不仅仅加载了以 dataId${spring.application.name}.${file-extension:properties} 为前缀的基础配置,还加载了dataId${spring.application.name}-${profile}.${file-extension:properties} 的基础配置。在日常开发中如果遇到多套环境下的不同配置,可以通过Spring 提供的 ${spring.profiles.active} 这个配置项来配置。

在这里插入图片描述

在这里插入图片描述

更改配置重新发布
在这里插入图片描述

2.2 支持自定义 namespace 的配置

用于进行租户粒度的配置隔离。不同的命名空间下,可以存在相同的 Group 或 Data ID 的配置。Namespace 的常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。

在没有明确指定 ${spring.cloud.nacos.config.namespace} 配置的情况下, 默认使用的是 Nacos 上 Public 这个namespace。如果需要使用自定义的命名空间,可以通过以下配置来实现:

spring.cloud.nacos.config.namespace=dev or prod

注意:该配置必须放在 bootstrap.properties 文件中。此外 spring.cloud.nacos.config.namespace 的值是 namespace 对应的 id,id 值可以在 Nacos 的控制台获取。并且在添加配置时注意不要选择其他的 namespace,否则将会导致读取不到正确的配置。

2.3 支持自定义 Group 的配置

在没有明确指定${spring.cloud.nacos.config.group}配置的情况下, 默认使用的是 DEFAULT_GROUP 。如果需要自定义自己的 Group,可以通过以下配置来实现:

spring.cloud.nacos.config.group=DEVELOP_GROUP

2.4 支持自定义扩展的 Data Id 配置

Spring Cloud Alibaba Nacos Config 从 0.2.1 版本后,可支持自定义 Data Id 的配置。
一个完整的配置案例如下所示:

spring.application.name=opensource-service-provider
spring.cloud.nacos.config.server-addr=127.0.0.1:8848

# config external configuration
# 1Data Id 在默认的组 DEFAULT_GROUP,不支持配置的动态刷新
spring.cloud.nacos.config.extension-configs[0].data-id=ext-config-common01.properties

# 2Data Id 不在默认的组,不支持动态刷新
spring.cloud.nacos.config.extension-configs[1].data-id=ext-config-common02.properties
spring.cloud.nacos.config.extension-configs[1].group=GLOBALE_GROUP

# 3Data Id 既不在默认的组,也支持动态刷新
spring.cloud.nacos.config.extension-configs[2].data-id=ext-config-common03.properties
spring.cloud.nacos.config.extension-configs[2].group=REFRESH_GROUP
spring.cloud.nacos.config.extension-configs[2].refresh=true

可以看到:

  • 通过 spring.cloud.nacos.config.extension-configs[n].data-id 的配置方式来支持多个 Data Id 的配置。
  • 通过 spring.cloud.nacos.config.extension-configs[n].group 的配置方式自定义 Data Id 所在的组,不明确配置的话,默认是 DEFAULT_GROUP。
  • 通过 spring.cloud.nacos.config.extension-configs[n].refresh 的配置方式来控制该 Data Id 在配置变更时,是否支持应用中可动态刷新, 感知到最新的配置值。默认是不支持的。

多个 Data Id 同时配置时,他的优先级关系是 spring.cloud.nacos.config.extension-configs[n].data-id 其中 n 的值越大,优先级越高。

spring.cloud.nacos.config.extension-configs[n].data-id 的值必须带文件扩展名,文件扩展名既可支持 properties,又可以支持 yaml/yml。 此时 spring.cloud.nacos.config.file-extension 的配置对自定义扩展配置的 Data Id 文件扩展名没有影响。

通过自定义扩展的 Data Id 配置,既可以解决多个应用间配置共享的问题,又可以支持一个应用有多个配置文件。
为了更加清晰的在多个应用间配置共享的 Data Id ,你可以通过以下的方式来配置:

# 配置支持共享的 Data Id
spring.cloud.nacos.config.shared-configs[0].data-id=common.yaml

# 配置 Data Id 所在分组,缺省默认 DEFAULT_GROUP
spring.cloud.nacos.config.shared-configs[0].group=GROUP_APP1

# 配置Data Id 在配置变更时,是否动态刷新,缺省默认 false
spring.cloud.nacos.config.shared-configs[0].refresh=true

可以看到:

  • 通过 spring.cloud.nacos.config.shared-configs[n].data-id 来支持多个共享 Data Id 的配置。
  • 通过 spring.cloud.nacos.config.shared-configs[n].group 来配置自定义 Data Id 所在的组,不明确配置的话,默认是 DEFAULT_GROUP。
  • 通过 spring.cloud.nacos.config.shared-configs[n].refresh 来控制该Data Id在配置变更时,是否支持应用中动态刷新,默认false。

配置的优先级
Spring Cloud Alibaba Nacos Config 目前提供了三种配置能力从 Nacos 拉取相关的配置。

  • A: 通过 spring.cloud.nacos.config.shared-configs[n].data-id 支持多个共享 Data Id 的配置
  • B: 通过 spring.cloud.nacos.config.extension-configs[n].data-id的方式支持多个扩展 Data Id 的配置
  • C: 通过内部相关规则(应用名、应用名+ Profile )自动生成相关的 Data Id 配置

当三种方式共同使用时,他们的一个优先级关系是:A < B < C


新建一个公共的配置
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

2.5 最佳实践

在这里插入图片描述

  • Namespace:用来区分环境(开发、测试、预发、生产),因为 Namespace 隔离最彻底,跨 Namespace 不能直接访问配置。示例:devtestpreprod
  • Group:用来区分项目(或大模块),同一 Namespace 下可以有多个项目的配置。 示例:order-serviceuser-servicepayment-service
  • DataId:用来对应具体的应用/工程配置文件,可以进一步细分配置内容。通常和 application.yml 类似。示例:order-service.yamluser-service.properties
    • 如果一个项目里有多份配置(如核心配置、数据库配置、日志配置),也可以拆开: application.yaml datasource.yaml logback.xml

2.5.1 举例 电商平台

  • Namespacedev(开发环境)
  • Grouporder-service
  • DataId
    • application.yaml(通用配置)
    • datasource.yaml(数据库配置)
    • mq.yaml(消息队列配置)

同理,测试环境就是 Namespace 换成 test,生产环境换成 prod
在这里插入图片描述

2.5.2 多项目大团队

  • Namespaceprod(生产环境)

  • Group

    • projectA
    • projectB
  • DataId

    • projectA-user-service.yaml
    • projectA-order-service.yaml
    • projectB-report-service.yaml

这样便于区分不同项目的配置,避免 DataId 重名。

2.5.3 代码示例

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

package com.beijing;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Component;

/**
 * 动态读取 Nacos 配置
 */
@RefreshScope
@Component
@ConfigurationProperties(prefix = "redis") // 对应 Nacos 配置里的 redis.*
public class NacosConfigReader {

    private Integer key;
    private Integer value;

    public Integer getKey() {
        return key;
    }

    public void setKey(Integer key) {
        this.key = key;
    }

    public Integer getValue() {
        return value;
    }

    public void setValue(Integer value) {
        this.value = value;
    }
}

3. 在bean里面使用配置

@RefreshScope动态感知
在这里插入图片描述

在这里插入图片描述

4. 如何配置以及大厂的使用demo

Spring Boot 多环境配置文件命名

application.yml ← 主配置(公共配置,所有环境共享)
application-dev.yml ← dev 环境专属
application-test.yml ← test 环境专属
application-prod.yml ← prod 环境专属

命名公式application-{profile}.yml(或 .yaml / .properties


application.yml → 真正公共的配置(应用名、日志格式、MyBatis等)
application-dev.yml → dev 的 Nacos 连接 + dev 业务配置
application-test.yml → test 的 Nacos 连接 + test 业务配置
application-prod.yml → prod 的 Nacos 连接 + prod 业务配置

标准写法:
application.yml(只放公共配置)

spring:
  application:
    name: user-service        # 应用名,所有环境都一样
  profiles:
    active: dev               # 默认激活 dev,部署时用命令行覆盖

# 公共配置:日志、MyBatisJackson 等所有环境都相同的
logging:
  pattern:
    console: "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n"

mybatis:
  mapper-locations: classpath:mapper/*.xml
  configuration:
    map-underscore-to-camel-case: true

application-dev.yml(dev 的 Nacos + 业务配置)

spring:
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
        namespace: dev
        group: ECOMMERCE_GROUP
      config:
        server-addr: localhost:8848
        namespace: dev
        group: ECOMMERCE_GROUP
        file-extension: yaml

# dev 本地兜底配置(Nacos 上也可以配,这里做本地启动兜底)
server:
  port: 8080

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/user_db_dev
    username: root
    password: 123456

logging:
  level:
    com.example: debug

application-prod.yml(prod 的 Nacos + 业务配置)

spring:
  cloud:
    nacos:
      discovery:
        server-addr: prod-nacos.example.com:8848
        namespace: prod
        group: ECOMMERCE_GROUP
        username: ${NACOS_USERNAME}      # 生产账号密码用环境变量注入
        password: ${NACOS_PASSWORD}
      config:
        server-addr: prod-nacos.example.com:8848
        namespace: prod
        group: ECOMMERCE_GROUP
        file-extension: yaml
        username: ${NACOS_USERNAME}
        password: ${NACOS_PASSWORD}

server:
  port: 8080

spring:
  datasource:
    url: jdbc:mysql://prod-mysql:3306/user_db
    username: ${DB_USERNAME}
    password: ${DB_PASSWORD}

logging:
  level:
    com.example: warn


隔离强度:Namespace > Group > DataId

在这里插入图片描述
在这里插入图片描述

4.1 大厂标准的 Nacos 改造方案

一、整体架构规划

在这里插入图片描述

在这里插入图片描述

二、项目依赖配置

pom.xml 新增依赖

<!-- Nacos 配置中心 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

<!-- Nacos 服务注册发现(如果需要的话) -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

<!-- Spring Cloud 2022.x+ 必须引入,否则 bootstrap.yml 不生效 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>

在这里插入图片描述

三、本地配置文件改造

  1. 新建 bootstrap.yml(核心,必须叫这个名字)
spring:
  application:
    name: knowledge-graph
  profiles:
    active: dev          # 本地开发默认 dev,部署时用 --spring.profiles.active=sit 覆盖
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848    # Nacos 地址,不同环境可以不一样
        namespace: ${spring.profiles.active}   # 动态跟随 profile:dev/sit/uat
        group: KG_GROUP
        file-extension: yaml
        refresh-enabled: true          # 开启动态刷新
        # 共享配置(可选,多个服务共用的配置)
        shared-configs:
          - data-id: common-log.yaml
            group: COMMON_GROUP
            refresh: true
      # 服务注册发现(如果需要)
      discovery:
        server-addr: 127.0.0.1:8848
        namespace: ${spring.profiles.active}
        group: KG_GROUP

  1. 精简后的 application.yml(只留本地兜底)
# 本地兜底配置,Nacos 连不上时才用
server:
  port: 8080

spring:
  application:
    name: knowledge-graph

logging:
  level:
    root: INFO
  1. 删除本地的 application-for-dev.yml 等
    迁移到 Nacos 后,本地的 application-for-dev.ymlapplication-for-sit.ymlapplication-for-uat.yml 可以删掉,或者保留作为离线兜底。

四、Nacos 上的完整配置内容

配置 1:公共配置 knowledge-graph.yaml

三个环境完全一样的配置,每个 Namespace 下都建一份。

# ============================================================
# 知识图谱服务 - 公共配置(所有环境共享)
# DataId: knowledge-graph.yaml
# Group: KG_GROUP
# ============================================================

spring:
  application:
    name: knowledge-graph
  mvc:
    pathmatch:
      matching-strategy: ant_path_matcher
  jackson:
    time-zone: GMT+8
    date-format: yyyy-MM-dd HH:mm:ss
  servlet:
    multipart:
      max-file-size: 100MB
      max-request-size: 100MB
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    # Druid 连接池参数(所有环境一致)
    initial-size: 5
    min-idle: 10
    max-active: 20
    max-wait: 600000
    connection-timeout: 30000
    socket-timeout: 60000
    time-between-eviction-runs-millis: 10000
    min-evictable-idle-time-millis: 300000
    max-evictable-idle-time-millis: 900000
    validation-query: SELECT 1
    test-while-idle: true

server:
  port: 8080
  address: 0.0.0.0
  servlet:
    context-path: /v1

logging:
  level:
    root: INFO

# Swagger / Knife4j
springdoc:
  api-docs:
    enabled: true
    path: /v3/api-docs
  swagger-ui:
    enabled: true
    path: /swagger-ui.html
  default-flat-param-object: true

knife4j:
  enable: true

# MyBatis Plus
mybatis-plus:
  base-package: cn.ac.ict.knowledge.graph.dal
  configuration:
    map-underscore-to-camel-case: true
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  global-config:
    db-config:
      id-type: NONE
      logic-delete-value: 1
      logic-not-delete-value: 0
    banner: false
  type-aliases-package: cn.ac.ict.knowledge.graph.dal.dataobject
  mapper-locations: classpath*:mapper/*.xml

# 静态资源
static-resource:
  path: /root/why/static/
  data-config-file-path: data-config/file/

# y2 外部接口(公共部分)
y2:
  post:
    path: /bdg-api/bdg-develop/v1/dataSearch/queryPostDataScroll
    header:
      name: Authentication
  token:
    path: /bdg-api/auth/cas/oauth2.0/accessToken
    clientId: 1027980434144755712
    user: xxx
    password: xxx
    header:
      service: http://127.0.0.1
  local: 1
  ipPort: http://127.0.0.1:8989

# 数据导入
dataImport:
  channel: 境外新闻网站
  dataType: 发帖数据
  maxSize: 1000

# 关系方向
relation:
  direction: forwardly,reversely,bidirectional

# 数据配置文件
dataConfig:
  fileRoot: /data-config/example/
  example:
    fileName: example_data.txt

# 定时任务(公共部分)
cron:
  data-clean: 30
  job:
    switch: true
  allow-multi-single-job: true

# Elasticsearch
es:
  username: user
  password: 123ewq@

# SA-Token 权限认证(公共部分)
sa-token:
  is-auth: false
  timeout: 2592000
  is-concurrent: true
  token-style: uuid
  is-log: true

配置 2:dev 环境差异 knowledge-graph-dev.yaml

# ============================================================
# 知识图谱服务 - dev 环境配置
# DataId: knowledge-graph-dev.yaml
# Group: KG_GROUP
# Namespace: dev
# ============================================================

server:
  ip: 1.1.1.1

spring:
  datasource:
    url: jdbc:mysql://1.1.1.1:13306/knowledge_graph?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8
    username: root
    password: ict@123

structured:
  log:
    switch: 0

# 图谱检索接口
graph:
  search:
    exact: http://10.208.63.198:19999/api/v1/graph/search/extract/exact
    fuzzy: http://10.208.63.198:19999/api/v1/graph/search/fuzzy
    high: http://10.208.63.198:19999/api/v1/graph/search/high
    taglist: http://10.208.63.198:19999/api/v1/graph/search/extract/taglist
    edgelist: http://10.208.63.198:19999/api/v1/graph/search/extract/edgelist
    listcontent: http://10.208.63.198:19999/api/v1/graph/search/listcontent
    createMeta: http://10.208.63.198:19999/api/v1/graph/build/createMeta
    insertData: http://10.208.63.198:19999/api/v1/graph/build/insert/byTask
    graphStatic: http://10.208.63.198:19999/api/v1/graph/statistics
    propertiesFilter: http://10.208.63.198:19999/api/v1/graph/search/properties_filter
    tagProperties: http://10.208.63.198:19999/api/v1/graph/tag/properties
    byVid: http://10.208.63.198:19999/api/v1/graph/extract/byVid
    fullText: http://10.208.63.198:19999/api/v1/graph/fulltext
    relationList: http://10.208.63.198:19999/api/v1/graph/relation/list
    byRelation: http://10.208.63.198:19999/api/v1/graph/search/extract/byRelation
    cronInsert: http://10.208.63.198:19999/api/v1/graph/cron/graph/insert
    cronMetaUpdate: http://10.208.63.198:19999/api/v1/graph/cron/graph/meta/update
    showSpace: http://10.208.63.198:19999/api/v1/graph/show/space

# 模型算法接口
model-algorithm:
  restock: http://10.208.61.198:18727/api/v1/kgc/relation_completion/add_custom_rules
  getCustomRules: http://10.208.61.198:18727/api/v1/kgc/relation_completion/get_custom_rules
  deleteCustomRules: http://10.208.61.198:18727/api/v1/kgc/relation_completion/delete_custom_rules
  execute: http://10.208.61.198:18727/api/v1/kgc/relation_completion/get_relation_completion

# y5 认证
y5_auth:
  host: http://10.106.57.197:11093
  clintId: 1027980434144755712
  clintSecret: rdMeMDIwOTIwMjQxMzQ4MjAwODQ1iZ
  getTokenUri: /sign/authz/oauth/v20/token
  getUserInfoUri: /sign/api/oauth/v20/me
  logoutUri: /sign/sp/logout
  redirectUri: http://10.120.5.40:18090/authorize
  getY5ServiceTokenURL: /maxkey-mgt-api/sys/getTokenByOnlineTicket
  y5MenuURL: /maxkey-mgt-api/apps/userSchedules/jsondata
  getServiceTokenByOnlineTicket: /maxkey-mgt-api/sys/getTokenByOnlineTicket
  validate-online-ticket: /sign/onlineticket/validate
  callbackUri: https://kg.y.sit.4.cn/authorize
  logUri: https://auth.y.sit.4.cn/login

# 日志采集
collect-logs:
  host: http://1.1.1.1:19526
  collect: /maxkey-mgt-api/log/monitor/collect
  enabled: false

# 自定义配置
custom-config:
  config:
    front:
      url: https://qq.y.sit.4.cn
      id: 1027980434144755712

# 模型服务
model-service:
  host: http://test2.mlops.ac.cn:30800
  tmp-host: http://mlops.ac.cn:30800
  get-model-list: /api/v1/serving/services/getAllServiceByUserName

# 定时任务(环境差异)
cron:
  poll-job: false

# 融合服务
fusion:
  callback: http://1.1.1.1:18080/v1/fusion/task/status/update
  create:
    task: http://1.1.1.1:18655/api/v1/fusion/tasks

# 用户资源
user-resource:
  host: https://qq.y.sit.4.cn
  path: /maxkey-mgt-api/permissions/resources/v2/currentUserTree

# SA-Token(环境差异)
sa-token:
  token-name: Token
  is-read-cookie: true

配置 3:sit 环境差异 knowledge-graph-sit.yaml

# ============================================================
# 知识图谱服务 - sit 环境配置
# DataId: knowledge-graph-sit.yaml
# Group: KG_GROUP
# Namespace: sit
# ============================================================

server:
  ip: 172.23.2.41

spring:
  datasource:
    url: jdbc:mysql://172.23.2.41:13306/knowledge_graph?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8
    username: root
    password: ict@123

graph:
  search:
    exact: http://172.23.2.41:36047/api/v1/search/exact_search
    fuzzy: http://172.23.2.41:36047/api/v1/search/fuzzy_search
    high: http://172.23.2.41:36047/api/v1/search/high_search
    taglist: http://172.23.2.41:36047/api/v1/search/taglist_search
    edgelist: http://172.23.2.41:36047/api/v1/search/edgelist_search
    listcontent: http://172.23.2.41:36047/api/v1/search/listcontent_search
    createMeta: http://172.23.2.41:19999/api/v1/graph/build/createMeta
    insertData: http://172.23.2.41:19999/api/v1/graph/build/insert/byTask
    graphStatic: http://172.23.2.41:19999/api/v1/graph/statistics
    propertiesFilter: http://172.23.2.41:19999/api/v1/graph/search/properties_filter
    tagProperties: http://172.23.2.41:19999/api/v1/graph/tag/properties
    byVid: http://172.23.2.41:19999/api/v1/graph/extract/byVid
    fullText: http://172.23.2.41:19999/api/v1/graph/fulltext
    edgeList: http://172.23.2.41:19999/api/v1/graph/relation/list
    byRelation: http://172.23.2.41:19999/api/v1/graph/search/extract/byRelation
    cronInsert: http://172.23.2.41:19999/api/v1/graph/cron/graph/insert
    cronMetaUpdate: http://172.23.2.41:19999/api/v1/graph/cron/graph/meta/update
    showSpace: http://172.23.2.41:19999/api/v1/graph/show/space

model-algorithm:
  restock: http://172.23.2.41:18727/api/v1/kgc/relation_completion/add_custom_rules
  getCustomRules: http://172.23.2.41:18727/api/v1/kgc/relation_completion/get_custom_rules
  deleteCustomRules: http://172.23.2.41:18727/api/v1/kgc/relation_completion/delete_custom_rules
  execute: http://172.23.2.41:18727/api/v1/kgc/relation_completion/get_relation_completion

y5_auth:
  host: http://auth.y.sit.4.cn
  clintId: 1027980434144755712
  clintSecret: rdMeMDIwOTIwMjQxMzQ4MjAwODQ1iZ
  getTokenUri: /sign/authz/oauth/v20/token
  getUserInfoUri: /sign/api/oauth/v20/me
  logoutUri: /sign/sp/logout
  redirectUri: https://kg.y.sit.4.cn/authorize
  getY5ServiceTokenURL: /maxkey-mgt-api/sys/getTokenByOnlineTicket
  y5MenuURL: /maxkey-mgt-api/apps/userSchedules/jsondata
  getServiceTokenByOnlineTicket: /maxkey-mgt-api/sys/getTokenByOnlineTicket
  validate-online-ticket: /sign/onlineticket/validate
  callbackUri: https://kg.y.sit.4.cn/authorize
  logUri: https://auth.y.sit.4.cn/login

collect-logs:
  host: https://gw.y.sit.4.cn
  collect: /maxkey-mgt-api/log/monitor/collect
  enabled: true

custom-config:
  config:
    front:
      url: https://auth.y.sit.4.cn
      id: 1027980434144755712

model-service:
  host: http://gw.y.uat.4.cn:443
  tmp-host: http://mlops.ac.cn:30800
  get-model-list: /api/v1/serving/services/getAllServiceByUserName

cron:
  poll-job: true

fusion:
  callback: http://172.23.2.41:18080/v1/fusion/task/status/update
  create:
    task: http://10.60.1.76:18655/api/v1/fusion/tasks

user-resource:
  host: gw.y.sit.4.cn
  path: /maxkey-mgt-api/permissions/resources/v2/currentUserTree

sa-token:
  token-name: token
  is-read-cookie: false

其他省略!!!

五、代码中读取配置(推荐写法)

配置里有大量的 URL 和复杂对象,强烈建议用 @ConfigurationProperties 绑定,不要到处写 @Value

@ConfigurationProperties 默认支持 Nacos 动态刷新,不需要加 @RefreshScope
如果用 @Value,则需要在类上加 @RefreshScope 才能动态刷新。

  1. 图谱检索配置类
package cn.ac.ict.knowledge.graph.config;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Data
@Component
@ConfigurationProperties(prefix = "graph.search")
public class GraphSearchProperties {
    private String exact;
    private String fuzzy;
    private String high;
    private String taglist;
    private String edgelist;
    private String listcontent;
    private String createMeta;
    private String insertData;
    private String graphStatic;
    private String propertiesFilter;
    private String tagProperties;
    private String byVid;
    private String fullText;
    private String relationList;
    private String byRelation;
    private String cronInsert;
    private String cronMetaUpdate;
    private String showSpace;
}

都是这么写的,其他省略!!!

六、Nacos 控制台操作步骤

1. 登录 Nacos 控制台 → 命名空间 → 新建三个命名空间:
   - 名称:dev,ID:dev
   - 名称:sit,ID:sit
   - 名称:uat,ID:uat

2. 切换到 dev 命名空间 → 配置管理 → 配置列表 → 新建配置:
   - DataId: knowledge-graph.yaml
   - Group: KG_GROUP
   - 配置格式:YAML
   - 配置内容:粘贴上面「公共配置」内容
   - 点击发布

3. 再新建配置:
   - DataId: knowledge-graph-dev.yaml
   - Group: KG_GROUP
   - 配置内容:粘贴上面「dev 环境差异」内容
   - 点击发布

4. 切换到 sit 命名空间,重复步骤 2-3- knowledge-graph.yaml(公共配置,内容一样)
   - knowledge-graph-sit.yaml(sit 环境差异)

5. 切换到 uat 命名空间,重复步骤 2-3- knowledge-graph.yaml(公共配置)
   - knowledge-graph-uat.yaml(uat 环境差异)

七、启动验证

在这里插入图片描述

knowledge-graph/
└── src/main/resources/
    ├── bootstrap.yml          ← Nacos 连接信息(新增)
    └── application.yml        ← 精简后的本地兜底(原内容大部分搬到 Nacos

更多推荐