目录
构建SpringCloudAlibaba Nacos配置中心项目
Spring Cloud Aibaba 学习目录
1. Spring Cloud Alibaba 微服务介绍(一)
2. Spring Cloud Alibaba 之Nacos 安装(二)
3. Spring Cloud Alibaba 微服务组件 Nacos 注册中心(三)
4. Spring Cloud Alibaba 微服务负载均衡 Ribbon(四)
5. Spring Cloud Alibaba 微服务整合 OpenFeign(五)
6. Spring Cloud Alibaba 微服务组件 Nacos 配置中心(六)
7. Spring Cloud Alibaba 微服务组件 Sentinel 服务保护(七)
8. Spring Cloud Alibaba 分布式事务概念(八)
9. Spring Cloud Alibaba 微服务组件 Seata 分布式事务(九)
10. Spring Cloud Alibaba 服务网关 Gateway(十)
11. Spring Cloud Alibaba 微服务组件 Skywalking 分布式任务链(十一)
语雀文档:Spring Cloud Aibaba 学习 · 语雀
默认配置中心
概述
下面我们通过一个简单的例子来介绍如何使用 Nacos 来创建配置内容以及如何在 Spring Cloud 应用中加载 Nacos 的配置信息。
Nacos 配置文件
第一步:进入Nacos的控制页面,在配置列表功能页面中,单击右上角的+按钮,进入新建配置页面,如图填写配置信息:
详解说明
- Data ID:填入nacos-order.ymal
- Group:默认值 DEFAULT_GROUP
- 配置格式:选择ymal
- 配置内容:应用要加载的配置内容,这里仅作为示例,做简单配置,比如:order.title=nacos-order配置中心
构建SpringCloudAlibaba Nacos配置中心项目
第一步:创建一个Spring Cloud应用,可以命名为:order-config。
第二步:编辑 pom.xml,加入必要的依赖配置
项目搭建采用的版本是
- spring-boot 版本是 2.3.6.RELEASE
- spring-cloud 版本是 Hoxton.SR8
- spring-cloud-alibaba 版本是 2.2.5.RELEASE
注意:
- 本项目采用 parent 模块化构建项目
- 如果你开发工具没有 lombok 插件,可以把 pom 中 lombok 依赖删除掉
pom.xml 依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.6.RELEASE</version>
</parent>
<properties>
<java.version>1.8</java.version>
<spring.cloud.alibaba.version>2.2.5.RELEASE</spring.cloud.alibaba.version>
<spring.boot.version>2.3.6.RELEASE</spring.boot.version>
<spring.cloud.version>Hoxton.SR8</spring.cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.14</version>
<scope>provided</scope>
</dependency>
<!--alibaba-nacos-discovery(阿里注册中心discovery)-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--alibaba-config-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<!--Spring Cloud 相关依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring.cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--Spring Cloud Alibaba 相关依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring.cloud.alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
配置文件
说明:配置文件加载顺序,SpringBoot中会先加载 bootstrap.yml,后加载 application.yml
注意:如果是yml配置文件,必须是 bootstrap.yml 而不是 application.yml
详解说明:
客户端配置:在bootstrap.yml文件中 spring.cloud.nacos.config.file-extension 属性声明从配置中心中读取的配置文件格式
该配置的默认是为properties,即默认是读取properties格式的配置文件。当客户端没有配置该属性,并且在nacos server添加的是yml格式的配置文件,则给客户端会读取不到配置文件,导致启动失败。
server:
## 启动端口
port: 8130
spring:
application:
## 注册服务名
name: nacos-order
cloud:
nacos:
## 注册中心地址
discovery:
server-addr: 127.0.0.1:8848
## 配置中心地址
config:
server-addr: 127.0.0.1:8848
## 指定读取配置文件的后缀
file-extension: yaml
## 分组
group: DEFAULT_GROUP
启动类
@SpringBootApplication
@EnableDiscoveryClient
public class OrderConfigApp {
public static void main(String[] args) {
SpringApplication.run(OrderConfigApp.class,args);
}
}
测试类
其中通过 @Value 注解,注入了key为order.title的配置(默认为空字符串),这个配置会通过 /getOrder 接口返回,后续我们会通过这个接口来验证Nacos中配置的加载。另外,这里还有一个比较重要的注解@RefreshScope,主要用来让这个类下的配置内容支持动态刷新,也就是当我们的应用启动之后,修改了Nacos中的配置内容之后,这里也会马上生效。
/**
* @author: LiPing.Zou
* @create: 2020-05-18 15:27
**/
@RestController
@RefreshScope
public class OrderController {
@Value("${order.title}")
private String orderTitle;
@GetMapping("getOrder")
public String getOrder(){
return "order config" +orderTitle;
}
}
控制台输出日志
浏览器访问,测试成功!
当我们修改配置中心内容,会触发 RefreshEventListener 事件
分组配置中心
概述
默认分组为 DEFAULT_GROUP,GROUP 可以将不同的微服务进行分组划分。
Nacos 添加配置文件
配置文件
server:
## 启动端口
port: 8160
spring:
application:
## 注册服务名
name: group-order-config
cloud:
nacos:
## 注册中心地址
discovery:
server-addr: 47.103.20.21:8848
## 配置中心地址
config:
server-addr: 47.103.20.21:8848
## 指定读取配置文件的后缀
file-extension: yaml
## 分组
group: DEV_GROUP
控制台输出
CompositePropertySource {name='NACOS', propertySources=[NacosPropertySource {name='namespace-order-config-dev.yaml'}, NacosPropertySource {name='namespace-order-config.yaml'}]}
测试结果
总结
- 优点:通过Group按环境讲各个应用的配置隔离开。可以非常方便的利用Data ID和Group的搜索功能,分别从应用纬度和环境纬度来查看配置。
- 缺点:由于会占用Group纬度,所以需要对Group的使用做好规划,毕竟与业务上的一些配置分组起冲突等问题。
- 建议:这种方式虽然结构上比上一种更好一些,但是依然可能会有一些混乱,主要是在Group的管理上要做好规划和控制。
命名空间配置中心
概述
默认为 public,其作用可以用来实现环境隔离作用,比如我们的开发环境、测试环境、生产环境。Nacos 添加命名空间
配置文件
添加了 namespace: 9e7bf496-2518-415c-9dcf-d2d47453457e
server:
## 启动端口
port: 8180
spring:
application:
## 注册服务名
name: namespace-order-config
cloud:
nacos:
## 注册中心地址
discovery:
server-addr: 127.0.0.1:8848
## 配置中心地址
config:
server-addr: 127.0.0.1:8848
## 指定读取配置文件的后缀
file-extension: yaml
## 命名空间
namespace: 9e7bf496-2518-415c-9dcf-d2d47453457e
在新建 mall-test 命名空间新增配置
控制台输出
CompositePropertySource {name='NACOS', propertySources=[NacosPropertySource {name='namespace-order-config-dev.yaml'}, NacosPropertySource {name='namespace-order-config.yaml'}]}
测试结果
总结
- 优点:官方建议的方式,通过Namespace来区分不同的环境,释放了Group的自由度,这样可以让Group的使用专注于做业务层面的分组管理。同时,Nacos控制页面上对于Namespace也做了分组展示,不需要搜索,就可以隔离开不同的环境配置,非常易用。
- 缺点:没有啥缺点,可能就是多引入一个概念,需要用户去理解吧。
- 建议:直接用这种方式长远上来说会比较省心。虽然可能对小团队而言,项目不多,第一第二方式也够了,但是万一后面做大了呢?
多文件加载与共享配置
概述
有时候我们会对应用的配置根据具体作用做一些拆分,存储在不同的配置文件中,除了归类不同的配置之外,也可以便于共享配置给不同的应用。对于这样的需求,Nacos也可以很好的支持,下面就来具体介绍一下,当使用Nacos时,我们如何加载多个配置,以及如何共享配置。
配置中心添加两个配置文件
配置文件
group-share-config 服务同时加载两个配置文件 group-share-config.yaml, group-share-config2.yaml
server:
## 启动端口
port: 8160
spring:
application:
## 注册服务名
name: group-share-config
cloud:
nacos:
## 注册中心地址
discovery:
server-addr: 127.0.0.1:8848
## 配置中心地址
config:
server-addr: 127.0.0.1:8848
# ## 指定读取配置文件的后缀
# file-extension: yaml
# refreshable-dataids: group-share-config.yaml,group-share-config2.yaml
# shared-dataids: group-share-config.yaml,group-share-config2.yaml
ext-config:
- data-id: group-share-config.yaml
group: DEFAULT_GROUP
refresh: true
fileExtension: yaml
- data-id: group-share-config2.yaml
group: DEFAULT_GROUP
refresh: true
fileExtension: yaml
控制台输出
测试结果
项目地址https://gitee.com/gaibianzlp/springcould-alibaba-example.githttps://gitee.com/gaibianzlp/springcould-alibaba-example.githttps://gitee.com/gaibianzlp/springcould-alibaba-example.git点关注不迷路,觉得对你有帮助请给一个赞或者长按一键三连,谢谢!