七仔的博客

七仔的博客GithubPages分博

0%

升级到SpringBoot3.2和JDK17

博客后台进行版本升级,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
    5
    distributionBase=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
    36
    plugins {
    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

欢迎关注我的其它发布渠道