1.配置共享
在微服务中,有很多配置都是相同的,所以可以把相同的部分放在nacos中,在每个服务中拉取,这样就可以简化配置了
1.1创建共享配置文件
以jdbc的配置为例,我的项目中关于数据库部分除了不同服务的数据库名不一样,其他的配置都是一样的,因此把关于数据库的配置以及mybatis配置提到共享文件中
打开Nacos,新建一个配置文件
配置内容填入你想拉取的部分,如
spring:
datasource:
url: jdbc:mysql://${example.db.host}:${example.db.port:3306}/${example.db.database}?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: ${example.db.pw}
mybatis-plus:
configuration:
default-enum-type-handler: com.baomidou.mybatisplus.core.handlers.MybatisEnumTypeHandler
global-config:
db-config:
update-strategy: not_null
id-type: auto
注意,这里可以像在yaml文件中配置一样,使用占位符来代替原本的内容,比如
${example.db.host} 最终取值是你服务中的application.yaml配置文件的example.db.host值
${example.db.port:3306} 冒号后设默认值,如果在application中有对应的值则为对应值,否则为3306
确认无误后发布即可
1.2拉取共享配置文件
现在共享的部分已经上传到了nacos,那么原本我们的yaml文件中相对应的配置部分就可以删除了,记得配置共享配置文件中所需要的参数即可(${这样的参数})
需要注意的是,读取Nacos配置是SpringCloud上下文(ApplicationContext
)初始化时处理的,发生在项目的引导阶段。然后才会初始化SpringBoot上下文,去读取application.yaml而
SpringCloud在初始化上下文的时候会先读取一个名为bootstrap.yaml
(或者bootstrap.properties
)的文件,因此我们需要把nacos的地址写在bootstrap
中,否则是无法读取到的
首先导入依赖
<!--nacos配置管理-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!--bootstrap-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
接着配置bootstrap文件
spring:
application:
name: your-service # 服务名称
profiles:
active: dev # 环境
cloud:
nacos:
server-addr: 192.168.230.131 # nacos地址
config:
file-extension: yaml # 文件后缀名
shared-configs: # 共享配置
- dataId: shared-jdbc.yaml # 共享配置的名字
原本的application.yaml修改后为
server:
port: 8082
example:
db:
database: example-A
pw: 123456
# .......等一系列共享配置中所需的参数
至此,重启服务,共享配置就可以成功的拉取了
2.配置热更新
有很多参数会经常变动,不能每次变动都重启服务,因此需要参数的热更新,同样是使用nacos就可以实现,但是有两个前提条件
1.微服务中要以特定方式来读取配置,如通过@ConfigurationProperties注解来绑定值
2.Nacos中配置文件取名规则: [application.name]-[active.profile].[file.extension] 也就是:服务名-profile.文件后缀,其中profile可以写也可以不写,不写的话默认所有环境都生效
2.1创建属性类
比如说有两个参数一个是最大人数,一个是最大车辆数,这两个参数需要经常修改,我们可以用一个属性读取类来定义它们,使用@ConfigurationProperties来满足第一个条件
@Data
@Component
@ConfigurationProperties(prefix = "example.number")
public class NumberProperties {
//人数最大数量
private Integer maxPerson;
//车辆最大数量
private Integer maxVehicle;
}
2.2创建配置文件
在nacos中创建文件,名称按照要求来,比如说我创建一个dev环境下生效的配置
服务名,环境,后缀 这三个部分其实都在bootstrap中有过定义,可以照抄
其中配置内容如下,注意,要跟自己的属性读取类对应上
example:
number:
maxPerson: 10
maxVehicle: 2
将配置文件发布,这样启动服务后,通过修改nacos中的配置文件,就可以实现配置热更新了