💻目录
- 前言
- 1、基础架构
- 2、依赖
- 3、配置文件
- 3.1、bolg-product配置文件
- 3.1.1、application.yml配置文件
- 3.1.2、bootstrap.yml配置文件
- 3.1.3、nacos远程配置
- 3.2、bolg-system
- 3.1.1、application.yml配置文件
- 3.1.2、bootstrap.yml配置文件
- 3.2.3、nacos远程配置
- 4、测试
前言
🌟 本套mode使用的是Alibaba的2021.0.1版,springboot的2.6.3实现(适用于springboot 2.7~2.4),Nacos使用的最新的2.2.3版本,如果需要看安装nacos和基础搭建可以看我下面的博客!
nacos的安装和基本配置使用可以查看我这篇博客,或者关注下面的专栏后续会持续更新其他的Spring Cloud 组件介绍以及使用
🍅Nacos下载与安装配置(2.2.3版本示例)
🥒Spring Cloud Alibaba专栏
1、基础架构
大致架构如下:
- 父包指定spring的版本,
- 在util里存放共用的实体以及共用的一些依赖以及工具类
- 然后我建立了两个product的Module用来做远程调用时轮询测试
2、依赖
其他的一些依赖这里就不放了,只放nacos的相关依赖,第一个是服务注册的依赖,第二个是使得加载bootstrap.yml
文件在application.yml
文件前面加载。第三个是读取nacos配置中心的依赖(该依赖不加无法读取到nacos配置中心的内容,但不会报错!)。第四个是用于自动读取加载和刷新nacos中最新的配置的,@NacosValue
注解是依靠它
🔻:如果没有报错,并且配置也没有错,就很大可能是少了这个依赖,或者是nacos的版本和spring的版本不兼容!
<!-- nacos 服务注册 --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency>
<!-- 加载bootstrap文件--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId></dependency>
<!-- 读取nacos配置中心--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId><!-- <version>2.2.0.RELEASE</version>--></dependency><!-- 自动配置Nacos相关的配置加载和刷新!:提供了@NacosValue注解使用--><dependency><groupId>com.alibaba.boot</groupId><artifactId>nacos-config-spring-boot-starter</artifactId><version>0.2.12</version></dependency>
3、配置文件
bootstrap配置文件和application配置文件使用区别:
- bootstrap配置文件用于加载应用程序的基础配置,例如连接配置中心(如Nacos、Consul等)、配置加密等。
- application配置文件用于加载应用程序的业务配置。
3.1、bolg-product配置文件
两个bolg-product项目配置文件除了端口其他的一样的。
3.1.1、application.yml配置文件
这里不做什么配置就简单的配置名字和端口。
server:port: 8203spring:application:name: bolg-product
3.1.2、bootstrap.yml配置文件
spring:# 注入到nacoscloud:nacos:#配置中心配置discovery:namespace: a5b81f44-9ca6-42b6-99ff-a2a11626a09dserver-addr: 192.168.0.104:8848username: nacos #账号password: nacos #密码#注册中心配置:主要配置,一般情况下配置前面的就可以了config:server-addr: 192.168.0.104:8848 #注册的地址username: nacos #账号password: nacos #密码namespace: a5b81f44-9ca6-42b6-99ff-a2a11626a09d #命名空间file-extension: yml #配置文件的后缀prefix: bolg-product #配置文件前缀 ,如果不写 默认使用${spring.application.name}的值group: BOLG_GROUP #组名auto-refresh: true # 开启自动刷新#配置次配置文件:在一些特殊时候可能要配置多个,extension-configs:- data-id: config-a-dev.yml #配置文件全名group: GROUP-A #组名refresh: true #是否支持热加载刷新- data-id: config-b-dev.ymlgroup: GROUP-Arefresh: false#共享配置文件 ---优先级低(比本地的低)shared-configs:- data-id: application.ymlgroup: GROUP-A
3.1.3、nacos远程配置
这个地方的DataID的值是需要是:${prefix}-${spring.profiles.active}.${file-extension}
我这里写的是bolg-order.yml
是因为我没有配置spring.profiles.active
这个参数
而${prefix}
如果不写默认会去取${spring.application.name}
3.2、bolg-system
3.1.1、application.yml配置文件
因为我要用openfeign远程调用使用加了其他的一些参数配置
server:port: 8201
spring:application:name: bolg-order
# profiles:
# active: dev# 开启负载均衡(默认是不开启的)
feign:circuitbreaker:enabled: true
# 熔断配置
hystrix:command:default:execution.isolation.thread.timeoutInMilliseconds: 3000 # 设置Hystrix超时时间(毫秒)ProductFeignClient#getProducts:execution.isolation.thread.timeoutInMilliseconds: 1000 # 为特定的Feign方法设置超时时间
3.1.2、bootstrap.yml配置文件
这个地方我为了对比差异尝试,配置中心和注册中心应该是分开的,他们的配置可以不设置在同一个命名空间里,这里我注册中心配置在了dev空间,而配置中心我放在了默认的public命名空间,不设置${namespace}
参数就是默认的命名空间
server:port: 8201
spring:# 注入到nacoscloud:nacos:#配置中心配置discovery:namespace: a5b81f44-9ca6-42b6-99ff-a2a11626a09dserver-addr: 192.168.0.104:8848username: nacos #账号password: nacos #密码#注册中心配置config:server-addr: 192.168.0.104:8848username: nacos #账号password: nacos #密码
# namespace: a5b81f44-9ca6-42b6-99ff-a2a11626a09d #不写命名空间默认是publicfile-extension: yml #配置文件的后缀prefix: bolg-order #配置文件前缀 ,如果不写 默认使用${spring.application.name}的值group: BOLG_GROUP #组名auto-refresh: true
3.2.3、nacos远程配置
和上面的区别是命名空间不同
4、测试
这里我就加一个测试读取nacos远程文件的接口吧
- 使用
@Value
注解也可以读取到远程的内容的,因为它加载时加被加载一起加载到本地了 - 使用
@NacosValue
注解需要加第四个依赖才可以读取到远程的内容
@RestController
@RequestMapping("/admin/acl/index")
@Slf4j
public class index {@Resourceprivate ProductFeignClient productFeignClient;@NacosValue(value = "${bolg.name}" ,autoRefreshed = true)private String NacosName;@Value( "${bolg.name}")private String NacosName2;@Value("${server.port}")private Integer Port;/*** 测试订单服务是否有问题* @author yingfeng* @return * @return Result*/@PostMapping("/login")public Result login(){log.info("nacos名字:{},{},本地端口:{}",NacosName,NacosName2,Port);HashMap<String, String> map = new HashMap<>(16);map.put("token","token-admin");System.out.println();return Result.ok(map);}
读取到的内容:可以看到如果本地和远程写了同样的内容,优先级上远程的要高一些。
具体的优先级如下:
- 配置文件优先级(由高到低):
nacos远程的配置 -> 本地application.properties -> application.yml ->本地bootstrap.properties -> bootstrap.yml