Springboot整合Nacos示例
环境依赖
JDK1.8+
Springboot2.x
nacos2.x
官方的版本对应建议配置:
版本 0.2.x.RELEASE 对应的是 Spring Boot 2.x 版本,版本 0.1.x.RELEASE 对应的是 Spring Boot 1.x 版本。
但是为了防止版本问题,强烈建议Springboot的版本和nacos的版本完全一致。
maven仓库配置如下;
org.springframework.boot spring-boot-starter-parent 2.2.1.RELEASE
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Spring Boot Test 依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
<!--日志 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j}</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>${logback}</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>${logback}</version>
</dependency>
</dependencies>
注:如果Springboot是2.4以上的版本,maven仓库需要额外增加如下依赖:
org.springframework.cloud spring-cloud-starter-bootstrap 一个简单的示例
首先创建一个配置文件,配置文件用bootstrap.properties,配置信息如下:
spring.banner.charset=UTF-8
server.tomcat.uri-encoding=UTF-8
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true
spring.messages.encoding=UTF-8
server.port=8299
spring.application.name=springboot-nacos
spring.profiles.active=dev
nacos配置
Nacos服务自动注册
nacos.discovery.autoRegister=true
Nacos服务注册中心地址
spring.cloud.nacos.discovery.server-addr= http://127.0.0.1:8848
Nacos服务配置中心地址
spring.cloud.nacos.config.server-addr= http://127.0.0.1:8848
然后再来创建一个基本的启动类
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
/**
- @Author pancm
- @Description springboot集成nacos配置中心
- @Date 2024/1/26
- @Param
- @return **/ @SpringBootApplication @EnableDiscoveryClient public class App { private static final Logger logger = LoggerFactory.getLogger(App.class); public static void main( String[] args ) { // 启动嵌入式的 Tomcat 并初始化 Spring 环境及其各 Spring 组件 SpringApplication.run(App.class, args); logger.info(“程序启动成功!”); } }
这里我们还需要对配置是否生效进行测试,这里就创建一个Controller,然后调用接口的时候返回配置信息。@RefreshScope注解是可以进行动态刷新。
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import static org.springframework.web.bind.annotation.RequestMethod.GET;
/**
- @Author pancm
- @Description 官方示例文档
- @Date 2024/1/26
- @Param
- @return **/ @RestController @RequestMapping(“config”) @RefreshScope public class ConfigController {@Value(“${pcm.name:pcm-1001}”) private String name;@RequestMapping(value = “/getName”, method = GET) public String getName() { return name; }
}
注:这里为了防止启动失败,添加配置的时候设置一个默认值。
然后运行App,启动成功,日志信息如下:
在这里插入图片描述
首先我们调用接口来查看当前的配置信息,输入http://localhost:8299/config/getName,返回示例图如下,可以看到是可以获取默认的配置。
在这里插入图片描述
然后我们在Nacos的页面上面添加一个pcm.name的配置,并且更改配置的值,这里我们更改为pcm-2001,然后点击发布。
在这里插入图片描述
这里需要注意一下DataId的名称命名规则,默认的情况下dataId=prefix.file-extension,其中profix默认为${spring.application.name},file-extension默认为properties。
如果指定了spring.profile.active,那么就会变成dataId=prefix-spring.profile.active.file-extension。
比如上述的项目名称为springboot-nacos,配置文件的后缀是properties,那么DataId就是springboot-nacos.properties,指定了spring.profile.active=dev,那么DataId就是springboot-nacos-dev.properties。
但是我指定了spring.profile.active=dev,为什么DataId是springboot-nacos.properties
也可以呢?因为这里还涉及到一个优先级的问题。
DataId有三个配置规则
dataId =prefix
dataId =prefix.file-extension
dataId =prefix-spring.profile.active.file-extension
他们的优先级是按照匹配的精准度来进行了,也就是如果配置多个dataId的话,那么他会匹配最相近的,也就是匹配优先级是3>2>1,这里我们也可以通过启动中的日志进行查看。
在这里插入图片描述
发布成功之后我们可以看到日志也进行了刷新。
在这里插入图片描述
然后我们再进行访问http://localhost:8299/config/getName。通过下面的示例图我们可以看到配置已经刷新为我们设置的最新配置了。
在这里插入图片描述
Nacos配置管理
上述示例中,我们已经完成了一个简单的获取Nacos中的配置示例,并且可以实现配置刷新。但是如果我们有多个服务使用的话,那么我们需要对配置进行区分,不建议都是用默认的public空间,因此我们还需要创建新的命名空间,如果还有分组要求(一般就是环境区分,dev、test、prod),那么我们还可以再进行创建配置时指定好group。
在nacos的命名空间菜单中,我们创建一个新的命名空间,其中命名空间ID这个保证唯一就行,默认可以不填写。
在这里插入图片描述
创建成功之后,我们在来创建一个新的配置并且指定分组为dev,方便我们管理。此时里面的配置内容为pcm.name =pcm-dev。
在这里插入图片描述
创建完成之后,我们在Springboot的项目配置文件中新增如下配置:
nacos命名空间id
spring.cloud.nacos.config.namespace= pcm-namespace–id
对应的分组名称
spring.cloud.nacos.config.group= dev
配置文件后缀名,也可以不配置,默认为properties
spring.cloud.nacos.config.fileExtension= properties
重新启动项目,查看日子,我们可以看到已经配置成功了。
在这里插入图片描述
然后我们在重新启动项目,http://localhost:8299/config/getName。通过下面的示例图我们可以看到配置已经是设置的命名空间配置了。
在这里插入图片描述
多配置文件
在使用Nacos中,有时配置太多,不想放在一个配置文件中,此时就可以使用多个配置文件来进行区分管理。
在bootstrap.properties配置文件中新增如下配置,如果后续还有新的配置,参考下列配置,递增extension-configs[0]的数值即可,比如在新增一个配置文件,那么就是extension-configs[1] = xxx.properties 这样配置就可以了。
新增额外配置
##额外的第一个配置文件的dataId
spring.cloud.nacos.config.extension-configs[0].data-id=pcm-dev.properties
##额外的第一个配置文件的分组
spring.cloud.nacos.config.extension-configs[0].group=dev
在nacos中新增改配置文件,然后这里添加一个新的配置pcm.age=28.
在这里插入图片描述
然后再ConfigController代码中新增如下接口,添加完成之后重启项目。
@Value("${pcm.age:18}")
private String age;
@RequestMapping(value = "/getAge", method = GET)
public String getAge() {
return age;
}
访问http://localhost:8299/config/getAge。通过下面的示例图我们可以看到配置已经生生效了。
其他
关于SpringBoot整合nacos的demo简单讲解的文章就讲解到这里了,如有不妥,欢迎指正!
版权归原作者 weixin_50020009 所有, 如有侵权,请联系我们删除。