目录
Nacos作为服务配置中心演示
在Nacos
中添加配置信息
Nacos
中的匹配规则。
理论
Nacos
中的dataId
的组成格式与SpringBoot
配置文件中的匹配规则
实操
设置DataId
:
假设配置文件里:
那么DataId=${spring.application.name}-${spring.profiles.active}.${file-extension}
DataId=nacos-config-client-dev.yaml
通过这三个配置就可以确定当前项目使用配置中心里的哪一个配置文件
发布即可
Nacos作为配置中心-基础配置
新建模块:cloudalibaba-config-nacos-client3377
POM
:
<dependencies>
<!--nacos-配置中心-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!--nacos-注册中心-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--web + actuator-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--一般基础配置-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
配置文件:
bootstrap.yml
server:
port: 3377
spring:
application:
name: nacos-config-client #应用名
profiles:
active: dev #开发环境
cloud:
nacos:
discovery:
server-addr: localhost:8848 #服务注册中心地址
config:
server-addr: localhost:8848 #配置中心地址
file-extension: yaml #指定yaml格式的配置
在项目初始化时,要先保证从配置中心进行配置拉取,拉取配置之后,才能保证项目的正常启动
springboot
中配置文件的加载顺序:bootstrap>application
主启动:
@EnableDiscoveryClient
@SpringBootApplication
public class NacosConfigClientMain3377
{
public static void main(String[] args) {
SpringApplication.run(NacosConfigClientMain3377.class, args);
}
}
业务类:
@RestController
//实现配置自动更新
@RefreshScope
public class ConfigClientController
{
@Value("${config.info}")
private String configInfo;
@GetMapping("/config/info")
public String getConfigInfo() {
return configInfo;
}
}
测试:
因为之前已经再配置中心添加了一个DataId=nacos-config-client-dev.yaml
的配置
运行cloud-config-nacos-client3377
的主启动类
调用接口查看配置信息:http://localhost:3377/config/info
自带动态刷新:修改下Nacos
中的yaml
配置文件,再次调用查看配置的接口,就会发现配置已经刷新。
Nacos作为配置中心-分类配置
问题
1.实际开发中,通常一个系统会准备多个环境,如何保证指定环境启动时服务能正确读取到nacos上相应环境的配置文件呢?
2.一个大型分布式微服务系统会有很多微服务子项目,每个微服务项目又都会有相应的开发环境,测试环境,正式环境…
那么怎么对这些微服务配置进行管理呢?
Nacos
的图形化管理界面
配置管理
命名空间
Namespace+Group+Data ID三者关系?为什么这么设计?
DataID方案
指定spring.profile.active
和配置文件的DataID
来使不同环境下读取不同的配置。
默认空间+默认分组+新建dev
和test
两个DataID
修改spring.profile.active
属性就能进行多环境下配置文件的读取
重启,测试:
group方案
通过Group实现环境区分。
在nacos
图形界面控制台上面新建配置文件DataID
:分组设置,可以在新建配置文件的时候,自定义
配置文件修改:表示在分组DEV_GROUP
下,使用配置文件nacos-config-client-info.yaml
作为当前应用的配置文件。
测试:重启。
namespace方案
新建namespace
回到服务管理-服务列表查看
配置文件修改:
表示在命名空间dev
下,分组为GROUP
下,使用配置文件nacos-config-client-info.yaml
作为当前应用的配置文件。
服务注册到命令空间dev下,而不是默认的命名空间。
小结
nacos下,能有多个namespace,每个namespace下能有多个分组,每个分组下能有多个配置文件。
加载多配置集
补
随着业务的不断壮大,微服务可能有非常多的配置,不能将所有的配置都写在一个配置文件里,一般做法拆分成几个文件,比如:与数据源有关的,写到DataSource.yml
中
比如:
1.配置文件application.yml
,拆分成数据源文件,mybatis
相关配置文件以及其他
server:
port: 7000
spring:
application:
##应用名,必须设置,不然注册不到nacos中
name: gulimall-coupon
datasource:
username: root
password: root
url: jdbc:mysql://192.168.59.131:3306/gulimall_sms
driver-class-name: com.mysql.jdbc.Driver
cloud:
nacos:
discovery:
server-addr: localhost:8848 #配置Nacos地址
mybatis-plus:
mapper-locations: classpath:/mapper/**/*.xml
global-config:
db-config:
#自增主键
id-type: auto
2.nacos
新建者三个配置文件,内容如下:
datasource.yml:
spring:
datasource:
username: root
password: root
url: jdbc:mysql://192.168.59.131:3306/gulimall_sms
driver-class-name: com.mysql.jdbc.Driver
mybatis.yml:
mybatis-plus:
mapper-locations: classpath:/mapper/**/*.xml
global-config:
db-config:
#自增主键
id-type: auto
other.yml:
server:
port: 7000
spring:
application:
##应用名,必须设置,不然注册不到nacos中
name: gulimall-coupon
cloud:
nacos:
discovery:
server-addr: localhost:8848 #配置Nacos地址
3 配置bootstrap.yml
spring:
application:
name: gulimall-coupon #应用名
profiles:
active: dev #开发环境
cloud:
nacos:
config:
server-addr: localhost:8848 #配置中心地址
file-extension: yaml #指定yaml格式的配置
namespace: f27b6ba2-164e-46bf-972e-7f998eba02ac
group: dev
#ext-config变成了extension-configs
##加载多配置集
extension-configs[0]:
data-id: datasource.yml
group: dev
refresh: true
extension-configs[1]:
data-id: mybatis.yml
group: dev
refresh: true
extension-configs[2]:
data-id: other.yml
group: dev
refresh: true
4.把application.yml
的配置全注释了,测试一下,即可。