springboot3.x集成nacos踩坑,并实现多环境配置

一、nacos安装部署

springboot3.x集成Nacos首先需要将Nacos从1.x升级到2.x,建议直接安装2.x版本,手动将1.x的配置信息迁移到2.x中,先并行一段时间,待全部迁移完成稳定运行之后再停掉1.x,升级和安装、操作请查看官方文档Nacos 2.0 升级文档 | Nacos,权限配置请参照Authorization | Nacos

nacos2.0版本相比1.X新增了gRPC的通信方式,因此需要增加2个端口。新增端口是在配置的主端口(server.port)基础上,进行一定偏移量自动生成。

端口 与主端口的偏移量 描述
9848 1000 客户端gRPC请求服务端端口,用于客户端向服务端发起连接和请求
9849 1001 服务端gRPC请求服务端端口,用于服务间同步等
7848 -1000 Jraft请求服务端端口,用于处理服务端间的Raft相关请求

如果存在防火墙或者nginx端口转发问题,需要进行相应的端口暴露配置。如在nginx中,在已经暴露8848(x)的基础上,需要额外暴露9848(x+1000)9849和7848端口为服务端之间的通信端口,请勿暴露到外部网络环境和客户端测。

二、springboot3.x集成nacos

1、添加依赖

XML 复制代码
        <!--nacos配置中心-->
        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>nacos-config-spring-boot-starter</artifactId>
            <version>0.3.0-RC</version>
        </dependency>

注意 : 版本 0.3.x.RELEASE 对应的是 Spring Boot 3.x 版本,版本 0.2.x.RELEASE 对应的是 Spring Boot 2.x 版本,版本 0.1.x.RELEASE 对应的是 Spring Boot 1.x 版本。

2、配置文件中添加nacos配置

(1)单个环境配置
bash 复制代码
nacos:
  config:
    #是否开启Nacos配置预加载
    bootstrap:
      enable: true
    data-id: demo-boot-v3
    type: yaml
    group: DEFAULT_GROUP
    auto-refresh: true
    server-addr: 127.0.0.1:8848
    namespace: 0f72f102-23c1-4176-869f-91f31c42a07e
    bootstrap:
      log:
        enable: true
    username: nacos
    password: nacos
(2)多环境配置,以开发环境dev和生产环境pro为例
bash 复制代码
spring:
  profiles:
    #指定要加载的配置
    active: dev

nacos:
  config:
    #是否开启Nacos配置预加载
    bootstrap:
      enable: true
    data-id: demo-boot-v3
    type: yaml
    group: DEFAULT_GROUP
    auto-refresh: true

---
#开发环境dev
spring:
  config:
    activate:
      on-profile: dev
nacos:
  config:
    #nacos的地址,替换成测试环境的实际地址即可
    server-addr: 127.0.0.1:8848
    #命名空间,替换为测试环境的实际命名空间即可
    namespace: 0f72f102-23c1-4176-869f-91f31c42a07e    
    bootstrap:
      log:
        enable: true
    #如果开启认证的话需要用户名和密码
    username: nacos
    password: nacos

---
#生产环境pro
spring:
  config:
    activate:
      on-profile: pro
nacos:
  config:
    #nacos的地址,替换成线上的实际地址即可
    server-addr: 127.0.0.1:8848
    #命名空间,替换为线上的实际命名空间即可
    namespace: 0f72f102-23c1-4176-869f-91f31c42a07e
    bootstrap:
      log:
        enable: true
    #如果开启认证的话需要用户名和密码
    username: nacos
    password: nacos

3、启动项目,踩坑

完成前面的工作之后,正常情况下nacos的集成就算成功了,但是,并没有想象的那么顺利,我们启动项目,意外发生了,控制台报错,项目启动失败!翻到最前面。报错内容如下:

java.lang.NoSuchMethodError: org.yaml.snakeyaml.constructor.SafeConstructor: method 'void <init>()' not found

自动集成的org.yaml.snakeyaml依赖包中相关类里面的方法不存在,真是太难了,于是尝试替换该依赖包,经过多个版本尝试,在pom.xml里面添加如下版本的依赖包进行覆盖后,终于能正常启动了!

XML 复制代码
        <dependency>
            <groupId>org.yaml</groupId>
            <artifactId>snakeyaml</artifactId>
            <version>1.32</version>
        </dependency>

大功告成!

相关推荐
qq_12498707536 小时前
基于微信小程序的电子元器件商城(源码+论文+部署+安装)
java·spring boot·spring·微信小程序·小程序·毕业设计
吃喝不愁霸王餐APP开发者6 小时前
基于Spring Cloud Gateway实现对外卖API请求的统一鉴权与流量染色
java·开发语言
a努力。6 小时前
美团Java面试被问:Redis集群模式的工作原理
java·redis·后端·面试
一雨方知深秋7 小时前
面向对象编程
java·封装·this·构造器·static关键字·成员变量·javabean实体类
资生算法程序员_畅想家_剑魔7 小时前
Java常见技术分享-11-责任链模式
java·spring boot·责任链模式
计算机程序设计小李同学7 小时前
动漫之家系统设计与实现
java·spring boot·后端·web安全
程序员阿鹏8 小时前
责任链模式
java·spring·servlet·tomcat·maven·责任链模式
@淡 定8 小时前
Java内存模型(JMM)详解
java·开发语言
czhc11400756638 小时前
C# 1221
java·servlet·c#
黄俊懿8 小时前
【深入理解SpringCloud微服务】Seata(AT模式)源码解析——全局事务的回滚
java·后端·spring·spring cloud·微服务·架构·架构师