nacos部署链接:Docker启动安装nacos(详情讲解,全网最细)_docker启动nacos-CSDN博客
nacos表数据链接:nacos数据表创建sql_nacos 建表语句-CSDN博客
nacos部署完成后,http://ip:8848/nacos/index.html
bootstrap.yml和application.yml的区别
bootstrap.yml
:在 ApplicationContext
初始化之前加载,比 application.yml
更早。适用于引入外部配置中心(如 Nacos、Consul),将配置信息配置在远程配置源时,以便在应用启动时从远程配置中心获取配置的情况下使用
application.yml
:在应用启动时加载,通常是在 ApplicationContext
初始化之后适用于配置应用的基本属性等常规单体项目时使用。
bootstrap.yml识别不了,怎么办?
解决方案:SpringBoot不读取bootstrap.yml/properties文件(高版本解决方案)_spring2.7.14版本 war包启动无法加载bootstrap.properties文件-CSDN博客
搭建Nacos服务发现中心
<!--提供了服务注册、服务发现、配置管理、负载均衡和健康检查等功能--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency>
创建命名空间
#微服务配置
spring:application:name: content-api #项目名称cloud:nacos:server-addr: 124.70.208.223:8848 #nacos的访问地址discovery:namespace: dev #命名空间(上一步创建的)group: xuecheng-plus-project #整个大项目的名字(也可以自己取名)
重新 启动项目后,就可以看到注册成功了
搭建Nacos为配置中心
配置管理注解
<!--将应用程序的配置从本地文件迁移到外部配置中心,实现配置的集中管理和动态刷新。--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency>
nacos如何去定位一个具体的配置文件呢?
即:namespace、group、dataid.
1、通过namespace、group找到具体的环境和具体的项目。
2、通过dataid找到具体的配置文件,dataid有三部分组成
比如:content-service-dev.yaml配置文件 由(content-service)-(dev). (yaml)三部分组成
content-service:第一部分,它是在application.yaml中配置的应用名,即spring.application.name的值。
dev:第二部分,它是环境名,通过spring.profiles.active指定,
Yaml: 第三部分,它是配置文件 的后缀,目前nacos支持properties、yaml等格式类
此时就可以将本地的配置,如mysql连接的配置,交由nacos管理(注意复制上去时不要掉了spring:)
spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://124.70.208.223:3306/xcplus_content?serverTimezone=UTC&useUnicode=true&useSSL=falseusername: rootpassword: root
logging:config: classpath:log4j2-dev.xml
server:servlet:context-path: /contentport: 63040
本地只需要保留这些配置,用户指定运行环境和nacos地址
#微服务配置
spring:application:name: content-api # 微服务名称cloud:nacos:server-addr: 124.70.208.223:8085discovery:namespace: dev # Nacos 服务管理的命名空间,用于隔离不同环境的服务group: xuecheng-plus-project # Nacos 服务发现的组名,用于进一步隔离服务config:namespace: dev # Nacos 配置管理的命名空间,用于隔离不同环境的配置group: xuecheng-plus-project # Nacos 配置管理的组名,用于进一步隔离配置file-extension: yaml # Nacos 配置文件的扩展名,这里指定为 YAML 格式refresh-enabled: true # 是否启用配置的动态刷新功能profiles:active: dev # 指定当前环境为开发环境
部署完成后重新运行程序,依旧生效
公共配置
shared-configs
适用于多个应用都需要的一些通用配置,例如数据库连接池配置、日志配置等。
在我们的项目中,有一些公共的配置,在任何模块中可能都会用到,我们可以将他单独提取出来。如:日志信息
使用shared-configs属性,引用该配置
spring:application:name: content-servicecloud:nacos:server-addr: 124.70.208.223:8085config:namespace: devgroup: xuecheng-plus-projectfile-extension: yamlrefresh-enabled: trueshared-configs:- data-id: logging-${spring.profiles.active}.yamlgroup: xuecheng-plus-commonrefresh: trueprofiles:active: dev
扩展配置
extension-configs:
适用于需要为特定应用添加额外配置的情况,例如某些特殊的功能配置或环境变量。
extension-configs
与shared-configs作用一样,语义不同
spring:application:name: content-api # 微服务名称cloud:nacos:server-addr: 124.70.208.223:8085discovery:namespace: dev # Nacos 服务管理的命名空间,用于隔离不同环境的服务group: xuecheng-plus-project # Nacos 服务发现的组名,用于进一步隔离服务config:namespace: dev # Nacos 配置管理的命名空间,用于隔离不同环境的配置group: xuecheng-plus-project # Nacos 配置管理的组名,用于进一步隔离配置file-extension: yaml # Nacos 配置文件的扩展名,这里指定为 YAML 格式refresh-enabled: true # 是否启用配置的动态刷新功能extension-configs:- data-id: logging-${spring.profiles.active}.yamlgroup: xuecheng-plus-commonrefresh: true
配置优先级
默认情况下,各配置文件 的优先级:项目应用名配置文件 > 扩展配置文件 > 共享配置文件 > 本地配置文件。
为了方便,我们一般会在nacos中配置本地优先
#配置本地优先
spring:cloud:config:override-none: true
网关
单独创建一个模块,配置网关
<!--网关--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency><!--服务发现中心--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency>
#微服务配置
spring:application:name: gatewaycloud:nacos:server-addr: 124.70.208.223:8085discovery:namespace: devgroup: xuecheng-plus-projectconfig:namespace: devgroup: xuecheng-plus-projectfile-extension: yamlrefresh-enabled: trueshared-configs:- data-id: logging-${spring.profiles.active}.yamlgroup: xuecheng-plus-commonrefresh: trueprofiles:active: dev
所以的网关相关配置全部配置到nacos中,创建gateway-dev.yaml
server:port: 63010 # 网关端口
spring:cloud:gateway:
# filter:
# strip-prefix:
# enabled: trueroutes: # 网关路由配置- id: content-api # 路由id,自定义,只要唯一即可# uri: http://127.0.0.1:8081 # 路由的目标地址 http就是固定地址uri: lb://content-api # 路由的目标地址 lb就是负载均衡,后面跟服务名称predicates: # 路由断言,也就是判断请求是否符合路由规则的条件- Path=/content/** # 这个是按照路径匹配,只要以/content/开头就符合要求
# filters:
# - StripPrefix=1- id: system-api# uri: http://127.0.0.1:8081uri: lb://system-apipredicates:- Path=/system/**
# filters:
# - StripPrefix=1- id: media-api# uri: http://127.0.0.1:8081uri: lb://media-apipredicates:- Path=/media/**
# filters:
# - StripPrefix=1