一、项目搭建
在nacos注册中心实践,已经安装好了nacos,并且并且成功的将项目注册到了nacos中。接下来在实践下nacos做配置中心,首先来构建项目。
1、POM文件导入依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>spring-cloud-nacos</artifactId>
<groupId>com.lwb</groupId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>nacos-config</artifactId>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<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>
<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>
</dependencies>
</project>
2、主启动类
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient
public class ApplicationNacosConfig {
public static void main(String[] args) {
SpringApplication.run(ApplicationNacosConfig.class, args);
}
}
3、controller书写
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RefreshScope
public class UserInfoController {
@Value("${system.username}")
private String username;
@GetMapping("/get/username")
public String getUsername() {
return username;
}
}
注意这里的@RefreshScope 是动态刷新的注解。意思是当nacos配置中心的配置内容发生变化后,controller对配置中心变量的引用可以立即生效,而不需要重启服务。比如@Value("${system.username}") 对system.username的引用,当配置中心修改了这个值会立即改变程序中的值。
4、配置文件
1、bootstrap.yml
spring:
application:
name: nacos-config
cloud:
nacos:
discovery:
server-addr: 192.168.101.41:8848
config:
server-addr: 192.168.101.41:8848
file-extension: yaml
2、application.yml
spring:
profiles:
active: dev
server:
port: 8809
为什么需要bootstrap.yml 来写配置中心的信息。因为bootstrap.yml 的优先级高于application.yml ,程序在启动的时候,需要先知道nacos的服务端的基础信息,此时还没有到加载application.yml的时候。相当于初始引导,所以一定要有这个配置文件来配置nacos的基础信息。 现在我们将bootstrop.yml 中的配置移动到application.yml 中,启动看看会发生什么情况 可以看到,成序刚启动直接就报http://localhost:8848连接超时了。这是因为在bootstrop.yml中没有找到nacos服务端配置信息,默认使用localhost:8848导致的。
另一个需要注意的是这个配置:
spring:
profiles:
active: dev
知道springboot的都知道,这是表示dev模块的配置文件生效。然而我们从定义的配置文件来看,并没有定义dev模块。 实际上,因为我们使用的是nacos作为配置中心,因此这个dev不单单是指本地dev模块,会到nacos服务端去中dev服务模块。具体的查找规则是${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension} spring.application.name 定义的服务名
spring:
application:
name: nacos-config
spring.profile.active 定义的生效模块
spring:
profiles:
active: dev
spring.cloud.nacos.config.file-extension 配置文件类型后缀,就是nacos添加配置的时候选择的类型 实际上就是我们nacos中配置的Data ID
因此在本实例中,得到的结果就是nacos-config-dev.yaml 。下面我们看看nacos配置服务端到底是怎么配置的。
二、配置定义
在上面描述中,本实例向nacos服务端添加了两个配置文件 当在开发环境的时候,可以选择dev配置文件。当在测试环境的时候,可以切换到test配置文件,仅仅需要指定下spring.profile.active 即可 nacos-config-dev.yaml 配置内容为:
system:
username: laiwenbo-dev
nacos-config-test.yaml 配置内容为:
system:
username: 隐市高手-test
首先我们按照spring.profile.active=dev 启动项目,访问controller中的/get/username接口 修改spring.profile.active=test 启动项目后访问
三、group分组方案
在nacos中配置中心,还可以根据分组来定位到底使用哪一个文件 比如定义了两个Data Id 为nacos-config-test.yaml 的配置文件,但是由于他们的group不同,所以我们只需要在bootstrap.yaml中指定对应的group 即可
四、nacos空间命名方案
在nacos的命名空间新建,会自动生成一个命名空间ID,将ID写到配置文件中即可。别的配置同上面的逻辑一直。
|