springboot3.x的各项改动

升级springboot3.0问题

时代的潮流,迫使不得不更新到boot3.x. 以下是做的一些改动

1、javax包改动问题

在升级到 Spring Boot 3.x 后出现 javax.persistence.AttributeConverter 爆红的问题,是因为 Jakarta EE 9+ 已经将包名从 javax 迁移到了 jakarta。以下是解决方案:

原因

Spring Boot 3.x 基于 Spring Framework 6 和 Jakarta EE 9+,后者已将 javax.persistence 等包名统一改为 jakarta.persistence

将:

1
import javax.persistence.AttributeConverter;

改成

1
import jakarta.persistence.AttributeConverter;

更新maven依赖

1
2
3
4
5
<dependency>
<groupId>jakarta.persistence</groupId>
<artifactId>jakarta.persistence-api</artifactId>
<version>3.1.0</version> <!-- 使用最新稳定版 -->
</dependency>
1
2
3
import javax.validation.constraints.NotNull;   --->  import jakarta.validation.constraints.NotNull;
javax.annotation.PostConstruct ---> jakarta.annotation.PostConstruct
import javax.servlet.http.HttpServletRequest; ---> import jakarta.servlet.http.HttpServletRequest;

2、JwtIssuerAuthenticationManagerResolver

旧写法:

1
2
import org.springframework.security.oauth2.jwt.JwtIssuerAuthenticationManagerResolver;
JwtIssuerAuthenticationManagerResolver authenticationManagerResolver=new JwtIssuerAuthenticationManagerResolver(issuersList);

新写法:

1
2
import org.springframework.security.oauth2.server.resource.authentication.JwtIssuerAuthenticationManagerResolver;
JwtIssuerAuthenticationManagerResolver resolver = JwtIssuerAuthenticationManagerResolver.fromTrustedIssuers(issuersList);

3、检查并升级 Spring Cloud Sleuth 版本

因为 Spring Boot 3.x 对分布式追踪系统进行了重大重构,从 Spring Cloud Sleuth 迁移到了 Micrometer Tracing

所以我们要引入pom的配置,还要在yml进行修改

1
2
3
4
5
6
7
8
management:
tracing:
sampling:
probability: 1.0
enabled: true
zipkin:
tracing:
endpoint: ${SPRING_ZIPKIN_BASEURL}

4、Spring Boot 3.x 中,RestTemplate 已不再是自动配置的 Bean,需要手动声明

1
2
3
4
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}

5、tomcat版本要10以上

目前我用的是10.1.42版本

1
<tomcat.version>10.1.42</tomcat.version>

6、application配置的层级问题

1
2
3
4
cloud:
stream:
function:
definition: receiveAuditLogEvent;rabbitReceiveAuditLogEvent

修改成:

1
2
3
4
cloud:
function:
definition: receiveAuditLogEvent;rabbitReceiveAuditLogEvent
stream:

7、Hibernate

  1. Hibernate 6 的破坏性变更
    • Hibernate 5.x 的 @Type(type = "yes_no") 用于将 Boolean 类型映射到数据库的 CHAR(1)'Y'/'N')。
    • Hibernate 6.x 移除了 @Type 的简单用法,改为更明确的类型系统(需要配合 @JdbcType@JavaType)。
1
2
3
4
5
6
import org.hibernate.annotations.JdbcType;
import org.hibernate.type.descriptor.jdbc.CharJdbcType;

@Column(name = "is_active")
@JdbcType(CharJdbcType.class) // 指定数据库存储为 CHAR
private Boolean isActive; // 自动映射为 'Y'/'N'

springboot3.x的各项改动
https://liu-cj25.github.io/2025/06/09/springboot3-x的各项改动/
Author
cj
Posted on
June 9, 2025
Licensed under