启动配置管理
启动了 Nacos server 后,您就可以参考以下示例代码,为您的 Spring Cloud 应用启动 Nacos 配置管理服务了。
添加依赖(pom.xml)
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
完成pom.xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
</dependency>
</dependencies>
基版本定义
<!--统一java包和版本号管理-->
<properties>
<java.version>1.8</java.version>
<spring-boot.version>2.2.2.RELEASE</spring-boot.version>
<spring-cloud.version>Hoxton.RELEASE</spring-cloud.version>
<alibaba-cloud.version>2.2.0.RELEASE</alibaba-cloud.version>
<maven.resources.plugin.version>2.6</maven.resources.plugin.version>
</properties>
<!--加载依赖管理-->
<!--注意:如果使用dependencyManagement,只是对版本进行管理,不会直接引入jar -->
<!--是为了在这里配置版本,为了让子模块pom或者本pom的直接dependencies不单独配置版本 -->
<!--如果没有版本,会先到这里找版本号,以免版本冲突 -->
<dependencyManagement>
<dependencies>
<dependency>
<!-- Import dependency management from Spring Boot -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${alibaba-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.5.8</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.18</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.28</version>
<scope>runtime</scope>
</dependency>
</dependencies>
</dependencyManagement>
注意:
- 版本 2.1.x.RELEASE 对应的是 Spring Boot 2.1.x 版本。版本 2.0.x.RELEASE 对应的是 Spring Boot 2.0.x 版本,版本 1.5.x.RELEASE 对应的是 Spring Boot 1.5.x 版本。
- 本例使用springCloud-H版本,springboot2.X
在 bootstrap.properties 中配置 Nacos server 的地址和应用名
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.application.name=example
或者使用bootstrap.yaml进行配置(方式2--优先选择)
#spring.cloud.nacos.config.server-addr 配置nacos连接地址
#spring.cloud.nacos.config.file-extension 制定配置文件的格式(目前支持:Properties和YAML )
#spring.cloud.nacos.config.extension-configs 如果还要额外加入其它的配置文件,接收是一个集合
#可以通过- dataId: 配置文件在dataId的名称
spring:
cloud:
nacos:
config:
server-addr: http://101.132.99.21:8848
#指定文件格式TEXT JSON XML YAML HTML Properties
file-extension: yml
#namespace: 这个是命名空间的uuid值(如果需要的话)这个主要是快速定位到某个命名空间【快速定位的意思】
#附加配置 extension-configs:
extension-configs:
- dataId: wolfconfig.yml
application:
name: example
#${prefix}-${spring.profiles.active}.${file-extension}
#prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
#spring.profiles.active 即为当前环境对应的 profile,详情可以参考 Spring Boot文档。
#注意:当 spring.profiles.active 为空时,对应的连接符 - 也将不存在,
#dataId 的拼接格式变成 ${prefix}.${file-extension}
#file-exetension 为配置内容的数据格式,可
#以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。
默认情况下,系统会按照上面的策略自动加载已项目名称为spring.application.name的名字等上面规则;
说明:
- 之所以需要配置 spring.application.name ,是因为它是构成 Nacos 配置管理 dataId字段的一部分。【具体看下面定义】
- 【重要】这里为什么需要使用bootstrap.application或者yml,因为在springcloud的中,系统级别的配置加载优先加载bootstrap.xx(properties或者yml)配置文件,然后在加载application.xx(properties或者yml)配置文件
- namespace 命名空间下面可以包含很多配置文件,例如开发中一般分为dev开发、uat测试、prd_uat测试生产灰度环境、prd 这么多环境,这些环境下面包含不同的配置文件,这样就可以通过建立命名空间进行管理
- 通过 Spring Cloud 原生注解 @RefreshScope 实现配置自动更新:
@RestController
@RequestMapping("/config")
@RefreshScope
public class ConfigController {
@Value("${useLocalCache:false}")
private boolean useLocalCache;
@RequestMapping("/get")
public boolean get() {
return useLocalCache;
}
}
注解说明
1、在springcloud中使用@RefreshScope配置表示刷新配置属性。
- 首先通过调用 Nacos Open API 向 Nacos Server 发布配置:dataId 为example.properties,内容为useLocalCache=true
curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=example.properties&group=DEFAULT_GROUP&content=useLocalCache=true"
- 运行 NacosConfigApplication,调用 curl http://localhost:8080/config/get,返回内容是 true。
- 再次调用 Nacos Open API 向 Nacos server 发布配置:dataId 为example.properties,内容为useLocalCache=false
curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=example.properties&group=DEFAULT_GROUP&content=useLocalCache=false"
- 再次访问 http://localhost:8080/config/get,此时返回内容为false,说明程序中的useLocalCache值已经被动态更新了。
说明:上面给nacos配置中心推送配置文件,可以可以通过直接发送请求推送,也可以直接通过在nacos配置中心直接修改配置文件后发布起作用。