加载多配置集
把配置中心配置的内容配置到bootstrap.properties中。
bootstrap.properties
spring.application.name=gulimall-coupon
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.namespace=f6d0dca7-036f-40a6-ad54-a2dddc96fdf2
#spring.cloud.nacos.config.group=prod
spring.cloud.nacos.config.extension-configs[0].data-id=datasource.yml
spring.cloud.nacos.config.extension-configs[0].group=dev
spring.cloud.nacos.config.extension-configs[0].refresh=true
spring.cloud.nacos.config.extension-configs[1].data-id=mybatis.yml
spring.cloud.nacos.config.extension-configs[1].group=dev
spring.cloud.nacos.config.extension-configs[1].refresh=true
spring.cloud.nacos.config.extension-configs[2].data-id=other.yml
spring.cloud.nacos.config.extension-configs[2].group=dev
spring.cloud.nacos.config.extension-configs[2].refresh=true
把gulimall-coupon重启后发现,加载的是默认分组里面的内容, 我们的配置中没有默认文件,就会去加载配置文件中的内容(也就是配置中心没有的就读取配置文件的)
Ignore the empty nacos configuration and get it based on dataId[gulimall-coupon] & group[DEFAULT_GROUP]
2021-06-21 18:32:42.288 WARN 17696 --- [ main] c.a.c.n.c.NacosPropertySourceBuilder : Ignore the empty nacos configuration and get it based on dataId[gulimall-coupon.properties] & group[DEFAULT_GROUP]
2021-06-21 18:32:42.291 INFO 17696 --- [ main] b.c.PropertySourceBootstrapConfiguration : Located property source: [BootstrapPropertySource {name='bootstrapProperties-gulimall-coupon.properties,DEFAULT_GROUP'}, B
这里是读取配置中心有的内容
spring.application.name=gulimall-coupon
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.namespace=f6d0dca7-036f-40a6-ad54-a2dddc96fdf2
spring.cloud.nacos.config.group=prod
spring.cloud.nacos.config.extension-configs[0].data-id=datasource.yml
spring.cloud.nacos.config.extension-configs[0].group=dev
spring.cloud.nacos.config.extension-configs[0].refresh=true
spring.cloud.nacos.config.extension-configs[1].data-id=mybatis.yml
spring.cloud.nacos.config.extension-configs[1].group=dev
spring.cloud.nacos.config.extension-configs[1].refresh=true
spring.cloud.nacos.config.extension-configs[2].data-id=other.yml
spring.cloud.nacos.config.extension-configs[2].group=dev
spring.cloud.nacos.config.extension-configs[2].refresh=true
/**
* 1.如何使用Nacos作为配置中心统一管理配置
* 1)引入依赖
* <dependency>
* <groupId>com.alibaba.cloud</groupId>
* <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
* </dependency>
* 2)创建一个bootstrap.properties
* spring.application.name=gulimall-coupon
* spring.cloud.nacos.config.server-addr=127.0.0.1:8848
*
* 3) 需要给配置中心默认添加一个数据集(Data Id) gulimall-coupon.properties, 默认规则是 应用名.properties
* 4)给 应用名.properties 添加任何配置
* 5)动态获取配置
* @RefreshScope :动态获取并刷新配置
* @Value("${配置项的名}") : 获取到配置
* 如果配置中心和当前应用的配置文件都配置了相同的项,优先使用配置中心的配置
* 2.细节
* 1)命令空间:配置隔离
* 默认: public(保留空间) 默认新增的所有配置都在public空间
* 1.开发 测试 生产:利用命名空间来做环境隔离
* 注意: 在bootstrap.properties中配置上需要使用哪个命名空间下的配置
* spring.cloud.nacos.config.namespace=a584e906-7a3c-43c2-bccf-f5a2ec26a2c7
* 2.每一个微服务之间相互隔离配置,每一个微服务都创建自己的命名空间,只加载自己命令下的所有配置
*
* 2)配置集 :所有配置的集合
* 3)配置集ID :类似文件名、
* Data ID :文件名
* 4)配置分组
* 默认所有的配置集都属于:DEFAULT_GROUP
*
*
* 每个微服务创建自己的命名空间,使用配置分组区分环境dev test prod
*
* 3.同时加载多个配置集
* 1) 微服务任何配置信息,任何配置文件都可以放在配置中心中
* 2)只需要在bootstrap.properties说明加载配置中心哪些配置文件即可
* 3) @Value @ConfigurationProperties
* 以前SpringBoot任何方法从配置文件中获取值,都能使用
* 配置中心有的优先使用配置中心的
*
*
*
*
*
*
/
API网关
Gateway
1.简介
网关作为流量的入口,常用功能包括路由转发、权限校验,、限流控制等。而springcloud gateway作为SpringCloud官方推出的第二代网关框架,取代了Zuul
网关提供API全托管服务,丰富的API功能,辅助企业管理大规模的API,以降低管理成本和安全风险,包括协议适配、协议转发、安全策略、防刷、流量、监控日志等功能。
Spring Cloud Gateway旨在提供一种简单而有效的方式来对API进行路由,并为他们提供切面,例如:安全性,监控/指标和弹性等。
新建一个spring模块
在pom.xml中添加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
配置
为网关创建一个命名空间:
遇到的错误
Spring MVC found on classpath, which is incompatible with Spring Cloud Gateway at this time.
Consider defining a bean of type 'org.springframework.http.codec.ServerCodec
解决办法 在pom.xml中进行配置
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</exclusion>
</exclusions>
</dependency>
遇到的错误
Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.
解决办法在application.yml中进行配置
#spring:
# application:
# name: gulimall-gateway
spring:
datasource:
username: root
password: 123456
url: jdbc:mysql://数据库连接地址:3306?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
driver-class-name: com.mysql.cj.jdbc.Driver
注意 bootstrap是在上下文加载之前获取配置中心的配置中心后加载,application里的配置可以全部到配置中心去配置,bootstrap.yml文件会优于application.yml加载
参照官方文档进行application.yml的配置Spring Cloud Gateway
参照官方文档的内容
未能测试成功
解决办法
1.在guilimall-gateway的pom.xml中去掉gulimall-common的依赖只导入下面两个依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
2.把在application.properties中配置的url去掉
页面访问: