SpringBoot 2.1.0 升级到 2.5.4 遇到的问题汇总

1. Nacos 升级到 2021.1 后,本地未启动 Nacos,则无法启动 SpringBoot。

背景

本来是用的 SpringBoot 2.1.0,和 Nacos 版本忘记了。

后来升级 SpringBoot 2.5.4,然后 Spring Cloud 那一些也需要升级,随后升级到了 Nacos 版本 2021.1。

升级完之后,将 bootstrap.yml 的 spring.cloud 那些注释掉,启动还是会报错,Nacos 连接失败。

未升级前只要将 spring.cloud nacos 那些注释掉,顶多启动的时候控制台报些错,但不会导致启动不了。

解决

在 bootstrap.yml 中,不需要将那些注释掉了,只需要加两个 enabled 的参数设置为 false 就可以了。

spring:
  application:
    name: keepAccount
  cloud:
    nacos:
      discovery:
        enabled: false
        server-addr: 127.0.0.1:8848
      config:
        enabled: false
        server-addr: 127.0.0.1:8848
        file-extension: yml

这样子,在启动就不会报错了。

2. 启动报错:When allowCredentials is true, allowedOrigins cannot contain the special value

之前的 CrossConfig 需要改一下,将 allowedOrigins("*") 改为 allowedOriginPatterns("*")

@Configuration
public class CrossConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
//                .allowedOrigins("*")
                .allowedOriginPatterns("*")
                .allowedMethods("GET", "HEAD", "POST", "PUT", "DELETE", "OPTIONS")
                .allowCredentials(true)
                .maxAge(3600)
                .allowedHeaders("*");
    }
}

3. SpringCloud版本升级后bootstrap.yml配置不生效

背景

和问题 1 有关联,因为 SpringBoot 升级,SpringCloud 也需要升级,当升级后重启 SpringBoot,发现 bootstrap.yml 中配置的应用端口号没生效,变成了默认的 8080.

问题原因

从Spring Boot 2.4版本开始,配置文件加载方式进行了重构。
另外也有配置的默认值变化,原来默认启用 true 现在变更为 false 如下:
version:2.4之前

package org.springframework.cloud.bootstrap;
public class BootstrapApplicationListener implements ApplicationListener<ApplicationEnvironmentPreparedEvent>, Ordered {
    public void onApplicationEvent(ApplicationEnvironmentPreparedEvent event) {
        ConfigurableEnvironment environment = event.getEnvironment();
        if ((Boolean)environment.getProperty("spring.cloud.bootstrap.enabled", Boolean.class, true)) {
        }
    }
}

version:2.4.2

package org.springframework.cloud.util;
public abstract class PropertyUtils {
    public static boolean bootstrapEnabled(Environment environment) {
        return (Boolean)environment.getProperty("spring.cloud.bootstrap.enabled", Boolean.class, false) || MARKER_CLASS_EXISTS;
    }
}

解决办法

pom文件中引入如下配置

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

指定运行参数 spring.cloud.bootstrap.enabled 值为 true

spring:
  cloud:
    bootstrap:
      enabled: true

参考文章和一切其他问题链接

springboot项目打包时提示“程序包xxx不存在,找不到符号

SpringCloud版本升级后bootstrap.yml配置不生效

报错:When allowCredentials is true, allowedOrigins cannot contain the special value

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!