SpringCloudAlibaba升级手册

目录

[1. 版本对照](#1. 版本对照)

版本现状

SpringCloud与AlibabaCloud对应版本

Springboot与Elasticsearch版本对应

[2. openfeign问题](#2. openfeign问题)

问题

解决方案

[3. Feign请求问题](#3. Feign请求问题)

问题

解决方法

[4. Sentinel循环依赖](#4. Sentinel循环依赖)

问题

解决方案

[5. bootstrap配置文件不生效](#5. bootstrap配置文件不生效)

问题

解决方案

[6. Nacos的连接错误](#6. Nacos的连接错误)

问题

解决方案

[7. 跨域问题](#7. 跨域问题)

问题

解决方案


1. 版本对照

版本现状

|----------------------------------------|---------------|---------------------------|
| 组件 | 版本 | 新版本 |
| SpringBoot | 2.3.2.RELEASE | 2.7.18 |
| SpringCloud | Hoxton.SR9 | 2021.0.9 |
| SpringCloudAlibaba | 2.2.6.RELEASE | 2021.0.5.0 |
| spring-boot-starter-data-elasticsearch | 2.3.2.RELEASE | SpringBoot版本内部定义 |
| nacos-client | 1.4.2 | AlibabaCloud版本内部定义(2.2.0) |

SpringCloud与AlibabaCloud对应版本

信息来源:

版本发布说明-阿里云Spring Cloud Alibaba官网

Springboot与Elasticsearch版本对应

Spring Boot 和 Elasticsearch 的版本兼容关系需要根据 Spring Data Elasticsearch 模块的版本来确定,因为 Spring Boot 通过 Spring Data Elasticsearch 来集成 Elasticsearch。以下是一些常见的版本对应关系

|----------------|------------------------------|------------------|
| Spring Boot 版本 | Spring Data Elasticsearch 版本 | Elasticsearch 版本 |
| 3.1.x | 5.1.x | 8.x |
| 3.0.x | 5.0.x | 8.x |
| 2.7.x | 4.4.x | 7.x |
| 2.6.x | 4.3.x | 7.x |
| 2.5.x | 4.2.x | 7.x |
| 2.4.x | 4.1.x | 7.x |
| 2.3.x | 4.0.x | 7.x |
| 2.2.x | 3.2.x | 6.x |
| 2.1.x | 3.1.x | 6.x |
| 2.0.x | 3.0.x | 5.x |

RestHighLevelClient:从 Spring Data Elasticsearch 4.x 开始,推荐使用 Elasticsearch 官方的 RestHighLevelClient 代替旧的 TransportClient。

Elasticsearch 7.x 引入了一些重要的映射变化,比如默认情况下不再需要指定 _type 字段,所有文档类型默认使用 _doc。

2. openfeign 问题

问题

|----------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Unexpected exception during bean creation; nested exception is java.lang.IllegalArgumentException: @RequestMapping annotation not allowed on @FeignClient interfaces |

Spring Cloud OpenFeign 3.x 版本中 @FeignClient 接口上不允许使用 @RequestMapping 注解的限制。

解决方案

将老代码中的 @RequestMapping 替换为具体的请求方式注解,例如 @GetMapping、@PostMapping 等。

修改前:

java 复制代码
@FeignClient(name = "example-service")

@RequestMapping("/example")

public interface ExampleFeignClient {

    @RequestMapping(method = RequestMethod.GET, value = "/getData")

    String getData();

}

修改后:

java 复制代码
@FeignClient(name = "example-service")

public interface ExampleFeignClient {

    @GetMapping("/example/getData")

    String getData();

}

Content-Type 头部设置了一个不允许的通配符 '*',而 Feign 不支持这种情况。

注解中加上 consumes = "application/json"参数,明确规定了请求的 Content-Type。

3. Feign请求问题

问题

|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Unexpected exception during bean creation; nested exception is java.lang.IllegalStateException: No Feign Client for loadBalancing defined. Did you forget to include spring-cloud-starter-loadbalancer? |

解决方法

你可以通过在 pom.xml 文件中手动添加 spring-cloud-starter-loadbalancer 依赖来解决这个问题:

XML 复制代码
<dependency>

    <groupId>org.springframework.cloud</groupId>

    <artifactId>spring-cloud-starter-loadbalancer</artifactId>

</dependency>

4. Sentinel循环依赖

问题

|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Description: The dependencies of some of the beans in the application context form a cycle: xxxxxImpl ↓ XxxxxImpl ↓ org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration$EnableWebMvcConfiguration ┌─────┐ | com.alibaba.cloud.sentinel.SentinelWebAutoConfiguration (field private java.util.Optional com.alibaba.cloud.sentinel.SentinelWebAutoConfiguration.sentinelWebInterceptorOptional) └─────┘ Action: Relying upon circular references is discouraged and they are prohibited by default. Update your application to remove the dependency cycle between beans. As a last resort, it may be possible to break the cycle automatically by setting spring.main.allow-circular-references to true. |

解决方案

升级为当前 Spring Cloud 一样的版本。

|-------------------------------------------------------------------------------------------------------------------------------------------------|
| <!--sentinel 版本 --> <spring-cloud-starter-alibaba-sentinel.version>2021.0.5.0</spring-cloud-starter-alibaba-sentinel.version> |

参考资料:

https://github.com/alibaba/spring-cloud-alibaba/issues/2322

https://juejin.cn/post/7080801716483915783 alibaba-sentinel启动报循环依赖

https://developer.aliyun.com/article/861163 springboot升级到2.6.1的坑

https://cloud.tencent.com/developer/article/2186649 我服了!SpringBoot升级后这服务我一个星期都没跑起来!

5. bootstrap配置文件不生效

问题

|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| org.springframework.cloud.commons.ConfigDataMissingEnvironmentPostProcessor$ImportException: No spring.config.import set Description: No spring.config.import property has been defined Action: Add a spring.config.import=nacos: property to your configuration. If configuration is not required add spring.config.import=optional:nacos: instead. To disable this check, set spring.cloud.nacos.config.import-check.enabled=false. |

解决方案

XML 复制代码
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>

参考资料:

https://cloud.tencent.com/developer/ask/sof/108770896

https://sca.aliyun.com/en/faq/sca-user-question-history13954/

6. Nacos的连接错误

问题

ErrCode:-401, ErrMsg:Client not connected,current status:STARTING的解决方案

解决方案

开通相应新增端口

参考资料:

https://www.cnblogs.com/linyb-geek/p/16601335.html

https://nacos.io/zh-cn/docs/v2/upgrading/2.0.0-compatibility.html

https://blog.csdn.net/fenglibing/article/details/120164149

7. 跨域问题

问题

|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| java.lang.IllegalArgumentException: When allowCredentials is true, allowedOrigins cannot contain the special value "*" since that cannot be set on the "Access-Control-Allow-Origin" response header. To allow credentials to a set of origins, list them explicitly or consider using "allowedOriginPatterns" instead. |

解决方案

SpringBoot升级2.4.0之后,跨域配置中的.allowedOrigins不再可用,将配置中的.allowedOrigins替换成.allowedOriginPatterns即可

参考资料:

https://blog.csdn.net/weixin_43901865/article/details/119737447

相关推荐
lapiii3584 小时前
瑞吉外卖之com.fasterxml.jackson.dataformat.cbor.CBORFactor相关报错
java·springboot
遇见你真好。7 小时前
SpringBoot整合quartz定时任务
java·springboot·quartz
VipSoft7 小时前
根据字符串,获取实体属性上的annotation,如:createTime” 找到对应实体属性中的 TableField(value = "create_time", fill = FieldFill.INSERT)
springboot
怎么起个名就那么难5 天前
ElasticSearch的向量存储和搜索
大数据·人工智能·spring·elasticsearch·langchain·springboot·springai
尚学教辅学习资料5 天前
基于springboot企业微信SCRM管理系统源码带本地搭建教程
springboot·scrm·java源码·1024程序员节
是小秋吖5 天前
微服务-CAP和AKF拆分原则
java·数据库·spring·spring cloud·微服务·架构·springboot
逐星ing5 天前
分布式并发场景的核心问题与解决方案
java·分布式·spring cloud·springboot·1024程序员节
程序猿进阶5 天前
SpringColoud GateWay 核心组件
java·后端·微服务·性能优化·架构·gateway·springcloud
周周写不完的代码6 天前
SpringCloudAlibaba-Nacos
java·分布式·springcloud