在nacos注册中心实践,已经安装好了nacos,并且并且成功的将项目注册到了nacos中。接下来在实践下nacos做配置中心,首先来构建项目。
1、POM文件导入依赖
<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-nacosartifactId>
<groupId>com.lwbgroupId>
<version>1.0.0-SNAPSHOTversion>
parent>
<modelVersion>4.0.0modelVersion>
<artifactId>nacos-configartifactId>
<properties>
<maven.compiler.source>8maven.compiler.source>
<maven.compiler.target>8maven.compiler.target>
properties>
<dependencies>
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
dependency>
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-actuatorartifactId>
dependency>
dependencies>
project>
2、主启动类
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
/**
* @author 隐市高手
* @date 2022/5/11 6:44
*/
@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;
/**
* @author 隐市高手
* @date 2022/5/11 6:51
*/
@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的引用,当配置中心修改了这个值会立即改变程序中的值。
spring:
application:
name: nacos-config
cloud:
nacos:
discovery:
server-addr: 192.168.101.41:8848 #nacos作为注册中心地址
config:
server-addr: 192.168.101.41:8848 #nacos作为配置中心地址
file-extension: yaml # 指定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
启动项目后访问
在nacos中配置中心,还可以根据分组来定位到底使用哪一个文件
比如定义了两个Data Id
为nacos-config-test.yaml
的配置文件,但是由于他们的group不同,所以我们只需要在bootstrap.yaml中指定对应的group
即可
在nacos的命名空间新建,会自动生成一个命名空间ID,将ID写到配置文件中即可。别的配置同上面的逻辑一直。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)