以单机模式启动Nacos
sh startup.sh -m standalone
配置中心的作用
配置中心提供了外部的服务端的配置支持,能在配置中心进行配置的管理,微服务在启动时从配置中心读取配置与本地的配置进行合并。在微服务运行时也能通过配置中心动态修改配置。Nacos配置管理菜单如图所示:
Nacos配置管理菜单
新建一个配置
新建配置
Data ID: 为配置文件中的
{spring.application.name}.{file-extension}
属性
Group:默认为DEFAULT_GROUP,可以通过spring.cloud.nacos.config.group
属性修改
编写一个测试程序
- 添加pom文件依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
- 编写
bootstrap.yml
bootstrap.yml
与application.yml
的不同之处在于bootstrap.yml
是在程序引导时执行的,更早于application.yml
优先执行,可以用来配置后续配置中获取到的参数
server:
port: 7010
spring:
application:
name: 03-nacos-discovery-config
cloud:
nacos:
username: nacos
password: nacos
discovery:
server-addr: 42.193.112.110:8848
# 配置中心配置
config:
# 配置中心地址
server-addr: 42.193.112.110:8848
# 配置中心中文件的后缀
file-extension: yaml
# 配置中心的 Group 属性
group: XCZ_GROUP
- 如果需要修改配置后动态刷新配置的值,可以在用到该配置的类上或者属性上添加
@RefreshScope
注解,这样在修改Nacos配置中心保存的配置后,用到该配置的属性会被动态刷新,示例代码如下:
@RefreshScope
@RestController
@EnableDiscoveryClient
@SpringBootApplication
public class NacosConfig03Application {
@Value("${user.name}")
private String name;
@Value("${user.age}")
private Integer age;
@GetMapping("/nacos/config")
public String nacosConfigTest() {
return "user.name: " + name + "; user.age: " + age;
}
public static void main(String[] args) {
SpringApplication.run(NacosConfig03Application.class, args);
}
}
多环境配置
nacos在加载配置可以加载Data Id为${spring.application.name}-${profile}.${file-extension}
的配置,可以通过${profile.active}
选择要从Nacos中加载的配置文件。示例代码入下:
- 在bootstrap.yml中指定环境
spring:
application:
name: 03-nacos-discovery-config
cloud:
nacos:
username: nacos
password: nacos
discovery:
server-addr: 42.193.102.100:8848
# 配置中心配置
config:
# 配置中心地址
server-addr: 42.193.102.100:8848
# 配置中心中文件的后缀
file-extension: yml
# 配置中心的 Group 属性
group: XCZ_GROUP
profiles:
active: dev
-
新建一个配置,配置名后面跟上多环境后缀
新建03-nacos-discovery-config-dev.yml
共享配置
我们有时候多个应用可能都需要一些共同的配置,比如redis连接信息,mybatis-plus的配置等等,我们可以把这些配置抽离出来成为一个公共的配置,再需要使用该配置的应用中添加:
# 共享的配置
spring.cloud.nacos.config.shared-configs[0]=application-dev.properties
这样,程序会在启动的时候会读取application-dev.properties
的配置。
经过测试发现,共享的配置不能自动刷新,非共享的配置可以自动刷新