您现在的位置是:首页 >技术杂谈 >SpringBoot整合Nacos配置中心和注册中心网站首页技术杂谈

SpringBoot整合Nacos配置中心和注册中心

JAVA菜鸟程序员 2024-06-12 18:01:02
简介SpringBoot整合Nacos配置中心和注册中心

一、背景

公司项目中使用的Nacos作为服务的注册中心和配置中心,但是呢公司的这一套Nacos是经过封装了的,而且封装的不是很友好,想着自己搭建一套标注的Nacos配置中心和服务中心

二、Nacos配置中心和注册中心搭建

2.1 依赖引入

<!--注册中心的依赖-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>2021.0.5.0</version>
        </dependency>

        <!-- 配置中心的依赖 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
            <version>2021.0.5.0</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
            <version>3.0.4</version>
        </dependency>

这里需要注意下SpringBoot的版本,不然jar包会有冲突,我这里使用的SpringBoot的版本是这个

 <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.6.13</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

 为什么要引入spring-cloud-starter-bootstrap的依赖呢?

答:因为在配置完Nacos注册中心和配置中心后,启动的时候报错如下错误,网上搜了一堆才找到回答。

SpringBoot和SpringCloud版本对应关系:版本说明 · alibaba/spring-cloud-alibaba Wiki · GitHub 

2.2 application.yml配置

server:
  port: 9999
spring:
  cloud:
    nacos:
      discovery: #nacos服务注册的配置
        server-addr: 127.0.0.1:8848
        register-enabled: true
        namespace: da8ba5de-6fd4-428c-9e64-7dcb38d28805
  profiles:
    active: dev

2.3 bootstrap.properties配置

#nacos配置中心的相关配置
spring.cloud.nacos.config.file-extension=yaml 
spring.cloud.nacos.config.namespace=da8ba5de-6fd4-428c-9e64-7dcb38d28805
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.group=DEFAULT_GROUP
#注意:应用的名称必须要在这里配置;不然在修改了Nacos配置之后,无法实时更新配置信息
spring.application.name=demo

2.4 启动入口加注解

加入@EnableDiscoveryClient注解

@EnableDiscoveryClient
@SpringBootApplication(scanBasePackages = {"com.example"})
@MapperScan({"com.example.demo.mapper"})
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

}

2.5 Nacos配置类

网上很多直接使用@Value注解的,但是在实际使用的过程中,发现@Value注解会导致更改了的配置不会实时刷新,所以最好是@RefreshScope和@ConfigurationProperties配合一起使用。

@RefreshScope
@Data
@Configuration
@ConfigurationProperties(prefix = "demo")
public class DemoPropertites {

    private String test;
}
@RestController
@RequestMapping("/nacos")
public class NacosController {
    @Resource
    private DemoPropertites demoPropertites;



    @RequestMapping("/config")
    public String getConfig(){
        return demoPropertites.getTest();
    }
}

2.6  启动本地Nacos服务

2.6.1 本地Nacos服务下载

Releases · alibaba/nacos · GitHub

我这边使用的是nacos-server-2.2.2版本的,刚开始使用的是1.4.5版本,发现有问题

2.6.2 本地Nacos启动

直接参考官网的启动方式:https://github.com/alibaba/nacos 

2.7 本地Nacos访问

localhost:8848/nacos  账号:nacos 密码:nacos

 2.8 创建Nacos命名空间

如果不创建命名空间的话,默认使用的是pulic保留空间;我创建了一个dev的命名空间

2.9 创建配置文件

在dev命名空间下,创建demo.yaml配置文件;注意Data Id的命名,默认情况是${spring.application.name}.${spring.cloud.nacos.config.file-extension}
${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}

spring.application.name:应用的名称

spring.profiles.active:当前启动的环境

spring.cloud.nacos.config.file-extension:nacos配置文件的后缀,支持yaml和properties

 2.10 启动项目

启动完成后Nacos会监听如下三个文件,如果有改动,则会更新配置文件信息

 未修改配置前,nacos数据获取:

修改配置后,nacos数据获取:

服务注册:

3. Nacos多环境配置

主要有以下三个环境的配置文件

 

开发环境:bootstrap-dev.properties

spring.cloud.nacos.config.file-extension=yaml
spring.cloud.nacos.config.namespace=da8ba5de-6fd4-428c-9e64-7dcb38d28805
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.group=DEFAULT_GROUP

spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
spring.cloud.nacos.discovery.register-enabled=true
spring.cloud.nacos.discovery.namespace=da8ba5de-6fd4-428c-9e64-7dcb38d28805

测试环境:bootstrap-test.properties

spring.cloud.nacos.config.file-extension=yaml
spring.cloud.nacos.config.namespace=52990b07-f6dd-4f24-b2e3-2523516d368b
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.group=DEFAULT_GROUP

spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
spring.cloud.nacos.discovery.register-enabled=true
spring.cloud.nacos.discovery.namespace=52990b07-f6dd-4f24-b2e3-2523516d368b

生产环境:bootstrap-pro.properties

spring.cloud.nacos.config.file-extension=yaml
spring.cloud.nacos.config.namespace=4d73106d-10f7-4893-bd75-a8b12244304d
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.group=DEFAULT_GROUP

spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
spring.cloud.nacos.discovery.register-enabled=true
spring.cloud.nacos.discovery.namespace=4d73106d-10f7-4893-bd75-a8b12244304d

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。