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 协议》,转载必须注明作者和本文链接