博客后台进行版本升级,SpringBoot从2.1升级到3.2,JDK从8升级到17,在这篇文章中记录一下需要注意的点
升级到SpringBoot3.2和JDK17
一、说明
博客后台进行版本升级,SpringBoot从2.1升级到3.2,JDK从8升级到17,在这篇文章中记录一下需要注意的点
二、调整
2.1 Gradle调整
gradle升级到了8.8,需要修改获取gradle的文件
gradle-wrapper.properties文件:
1
2
3
4
5distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
还需要修改项目的包管理gradle文件
build.gradle文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36plugins {
id 'java'
id 'org.springframework.boot' version '3.3.2'
id 'io.spring.dependency-management' version '1.1.6'
}
group = 'com.xxxxxxx'
version = '0.0.1-SNAPSHOT'
description = """xxxxxxxxxxxxx"""
java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
}
// 仓库
repositories {
// 阿里云仓库
maven { url "https://maven.aliyun.com/nexus/content/groups/public" }
mavenCentral()
}
// 依赖
dependencies {
// ...
// 这里引入依赖
}
tasks.withType(JavaCompile) {
options.compilerArgs.add("-parameters")
}
tasks.named('test') {
useJUnitPlatform()
}
2.2 Redis调整
一个是配置要修改,从spring.redis调整为spring.data.redis
- application.yml
# Spring spring: data: # redis redis: # Redis数据库索引 database: 0 # Redis服务器地址 host: localhost # Redis服务器连接端口 port: 6379 # Redis服务器连接密码 password: # 连接超时时间(毫秒) timeout: 1000 # 连接池 lettuce: pool: # 连接池最大连接数(使用负值表示没有限制) max-active: 200 # 连接池最大阻塞等待时间(使用负值表示没有限制) max-wait: -1 # 连接池中的最大空闲连接 max-idle: 10 # 连接池中的最小空闲连接 min-idle: 0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
还要调整配置,不一定非要是下面这样,我是之前的用不了了
* RedisConfig.java
* ```java
import com.alibaba.fastjson.support.spring.GenericFastJsonRedisSerializer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import java.nio.charset.StandardCharsets;
/**
* redis配置类
*/
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<String, Object> template = new RedisTemplate<>();
// 连接工厂
template.setConnectionFactory(redisConnectionFactory);
// key序列化
template.setKeySerializer(new StringRedisSerializer(StandardCharsets.UTF_8));
// value序列化
template.setValueSerializer(new GenericFastJsonRedisSerializer());
// hash序列化
template.setHashKeySerializer(new StringRedisSerializer(StandardCharsets.UTF_8));
template.setHashValueSerializer(new GenericFastJsonRedisSerializer());
// 启用事务支持
template.setEnableTransactionSupport(true);
return template;
}
}
@Cacheable中的SpEL表达式可能需要调整,我之前用的是#page.current
,现在调整为了#page['current']
,不过这个不知道是redis配置升级导致的还是mybatisplus升级导致的(page是mybatisplus中的)
- XXXController.java
import com.baomidou.mybatisplus.extension.plugins.pagination.Page public class XXXController { @Cacheable(value = CommonConstants.REDIS_GROUP_BLOG, key = "'page/'+#page['current']+'/'+#page['size']") public R<?> getXXX(Page page) { return R.ok(); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
我这里还有个自用的Redis工具类的del函数有调整
* RedisUtil.java
* ```java
/**
* 删除缓存
*
* @param key 可以传一个值 或多个
*/
@SuppressWarnings("unchecked")
public void del(String... key) {
if (key != null && key.length > 0) {
List<String> keys = Arrays.asList(key);
if (key.length == 1) {
redisTemplate.delete(keys.get(0));
} else {
redisTemplate.delete(keys);
}
}
}
2.3 MyBatis调整
首先是gradle中的MybatisPlus依赖调整
- build.gradle
// 依赖 dependencies { // mybatis-plus,数据层框架 implementation 'com.baomidou:mybatis-plus-spring-boot3-starter:3.5.7' }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
还有配置类需要调整
* MybatisPlusConfig.java
* ```java
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor()); // 分页支持
return interceptor;
}
}
还有Mapper需要调整,升级后需要明确对象的参数名
- XXXX.java
/** * 分页查询 */ IPage<Xxxxx> getXxxxxPage(@Param("page") Page<Xxxxx> page, @Param("xxxxxDTO") XxxxxDTO xxxxxDTO);
1
2
3
4
5
6
7
8
9
10
#### 2.4 引入javax.servlet改为jakarta.servlet
所有的javax.servlet引入都改为jakarta.servlet
* XXXX.java
* ```java
import jakarta.servlet.http.HttpServletResponse;
import jakarta.mail.internet.MimeMessage;
import jakarta.servlet.http.HttpServletRequest;
2.5 SpringSecurity调整
一个是不再需要继承WebSecurityConfigurerAdapter,configure函数也不需要@Override了,需要换成@Bean去加载,函数名更换为filterChain
- SecurityConfig.java
package com.baby7blog.config; import com.baby7blog.modules.blog.common.CommonConstants; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer; import org.springframework.security.config.http.SessionCreationPolicy; import org.springframework.security.web.SecurityFilterChain; import org.springframework.security.web.authentication.logout.LogoutFilter; /** * Spring Security 适配器 */ @Configuration @EnableWebSecurity public class SecurityConfig { @Autowired private AuthFilter authFilter; @Bean public SecurityFilterChain filterChain(HttpSecurity httpSecurity) throws Exception { return httpSecurity // CSRF禁用,因为不使用session .csrf(AbstractHttpConfigurer::disable) // 基于token,所以不需要session .sessionManagement(s -> s.sessionCreationPolicy(SessionCreationPolicy.STATELESS)) // 过滤请求 .authorizeHttpRequests(authorize -> authorize.requestMatchers( "/xxxxxx1", "/xxxxxx2").permitAll().anyRequest().authenticated() ) // 添加权限过滤器 .addFilterBefore(authFilter, LogoutFilter.class) .build(); } }
此为博主副博客,留言请去主博客,转载请注明出处:https://www.baby7blog.com/myBlog/136.html