上一篇我们讲了Nacos作为服务注册中心的用法,这一篇我们讲Nacos另一个功能——配置中心。
人狠话不多,直接上代码。
直接改造 sca 主模块的pom,添加配置中心的依赖
<!-- SpringCloud Alibaba 服务配置中心 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>0.2.2.RELEASE</version>
</dependency>
<!-- nacos discovery -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
把 sca-rest-normal 的 application.yml 的文件名改为 bootstrap.yml,这是由spring boot的加载属性文件的优先级决定的,想要在加载属性之前去config server上取配置文件,那NacosConfig或SpringCloudConfig相关配置就是需要最先加载的,而bootstrap配置的加载是先于application配置的,所以config client要配置config的相关配置就只能写到bootstrap配置里了。
其内容如下:
spring:
application:
name: normal-rest
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
config:
server-addr: 127.0.0.1:8848
file-extension: yaml
profiles:
active: dev
这里我没有配置项目端口号,所以默认启动肯定是8080,但是我们会在配置中心配置端口号,以便用来检验配置中心是否成功。
进入Nacos管理页面,选择左侧的配置列表,然后新建一个配置
这里的 Data ID 命名规则需要注意:
Data ID = ${prefix}-${spring.profile.active}.${file-extension}
其中,prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
spring.profile.active 即为当前环境对应的 profile,详情可以参考 Spring Boot文档。当 spring.profile.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 ${prefix}.${file-extension}。
file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。
配置好之后点击发布,然后我的配置列表就多了一条配置信息
改造OrderRest类
package com.ldh.sca.rest.normal;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Slf4j
@RestController
@RequestMapping("order")
@RefreshScope
public class OrderRest {
@Value("${ldh.name}")
private String name;
@GetMapping("/getName")
public String createOrder() {
System.out.println(name);
return name;
}
@RequestMapping("/createOrder")
public String createOrder() {
System.out.println("创建订单");
return null;
}
}
启动项目,然后访问 http://localhost:8889/order/getName,如果访问成功,并且返回配置中心配置的name值,那么,Nacos配置中心就生效了