升级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
- 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) private Boolean isActive;
|