若依微服务springcloud升级springboot3
概要
我使用的版本是若依微服务3.6.4版本;用了大半年之后,看着gitte上的提交记录,升级到了3.6.5版本。所以此次升级可以算作是在若依3.6.5的版本上升级springboot3的,本来想偷个懒看看有没有谁写过若依微服务从springboot2升级到3的,结果没有。官网只有vue版本的升级教程,没有微服务的,只能自己慢慢踩坑过来。在若依踩过的坑我以前都记录在有道云了,但是写的不够完善,过了一段时间之后自己就忘记了,后面慢慢在使用csdn写吧,有人看,或许会写的更认真一点。

一、从底层pom文件开始下手
1.1、更换版本号
运行项目并下载源码
1

tomcat 和 logback 如果项目本身没有的话可以不用加。 如果需要的话,贴下面的配置

<!-- 覆盖tomcat的依赖配置-->
<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-core</artifactId>
    <version>${tomcat.version}</version>
</dependency>

<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-el</artifactId>
    <version>${tomcat.version}</version>
</dependency>

<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-websocket</artifactId>
    <version>${tomcat.version}</version>
</dependency>
<!-- 覆盖logback的依赖配置-->
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-core</artifactId>
    <version>${logback.version}</version>
</dependency>

<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>${logback.version}</version>
</dependency>
运行项目并下载源码
xml


1.2、升级mybatis-plus
运行项目并下载源码

版本号:
<mybatis-plus-spring-boot3.version>3.5.5</mybatis-plus-spring-boot3.version>

<mybatis-plus.version>3.5.7</mybatis-plus.version>

<!-- mybatis-plus -->
<dependency>
     <groupId>com.baomidou</groupId>
     <artifactId>mybatis-plus-spring-boot3-starter</artifactId>
     <version>${mybatis-plus-spring-boot3.version}</version>
 </dependency>
 <dependency>
     <groupId>com.baomidou</groupId>
     <artifactId>mybatis-plus-boot-starter</artifactId>
     <version>${mybatis-plus.version}</version>
     <exclusions>
         <exclusion>
             <artifactId>mybatis-spring</artifactId>
             <groupId>org.mybatis</groupId>
         </exclusion>
     </exclusions>
 </dependency>
 <dependency>
     <groupId>com.baomidou</groupId>
     <artifactId>mybatis-plus-annotation</artifactId>
     <version>${mybatis-plus.version}</version>
     <scope>compile</scope>
 </dependency>
 <dependency>
     <groupId>com.baomidou</groupId>
     <artifactId>mybatis-plus-core</artifactId>
     <version>${mybatis-plus.version}</version>
     <scope>compile</scope>
 </dependency>
 <dependency>
     <groupId>com.baomidou</groupId>
     <artifactId>mybatis-plus-extension</artifactId>
     <version>${mybatis-plus.version}</version>
     <scope>compile</scope>
 </dependency>
运行项目并下载源码

1.3、升级mybatis-spring
运行项目并下载源码
1
从1.2中大家应该看到了。我从mybatis-plus-boot-starter中去除了mybatis-spring 。 原因是
在 Spring Boot 3.0后的 版本中

FactoryBeanRegistrySupport#getTypeForFactoryBeanFromAttributes方法已变更,如果
factoryBeanObjectType 不是 ResolvableType 或 Class 类型会抛出
IllegalArgumentException 异常。

此时因为 factoryBeanObjectType 是 String 类型,不符合条件而抛出异常。

项目中使用的 mybatis-plus-boot-starter 是当前最新版本 3.5.5,但 mybatis-spring 为2.0.6 和 2.1.2
因为有两个地方用到了。一个是mybatis-plus-boot-starter,一个是pagehelper


所以要分别在这两个里面排除掉,mybatis-plus-boot-starter 的我已经附在1.2里面了,所以这里就不放了;

<!-- pagehelper 分页插件 -->
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper-spring-boot-starter</artifactId>
    <version>${pagehelper.boot.version}</version>
    <exclusions>
        <exclusion>
            <artifactId>mybatis-spring</artifactId>
            <groupId>org.mybatis</groupId>
        </exclusion>
    </exclusions>
</dependency>
运行项目并下载源码
xml

除之后,需要新增mybatis-spring,版本号是
<mybatis-spring.version>3.0.3</mybatis-spring.version>

<dependency>
   <groupId>org.mybatis</groupId>
   <artifactId>mybatis-spring</artifactId>
   <version>${mybatis-spring.version}</version>
</dependency>
运行项目并下载源码
xml
1
2
3
4
5
我测试不排除直接加3的版本好像也可以,但总是有点不严谨,大家看着来就行;comom-core里面也要加,文档继续往下看,会写到的

1.4、插件升级
运行项目并下载源码
1
关于这一段,在问题发现中的7.3中也有介绍为什么要这么加。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
     <artifactId>maven-compiler-plugin</artifactId>
     <version>3.11.0</version>
     <configuration>
         <source>${java.version}</source>
         <target>${java.version}</target>
         <encoding>${project.build.sourceEncoding}</encoding>
         <compilerArgs>
             <arg>-parameters</arg>
         </compilerArgs>
     </configuration>
 </plugin>
运行项目并下载源码
xml

1
2
3
4
5
6
7
8
9
10
11
12
13
二、修改common-core pom文件
2.1、新增Spring Aop
运行项目并下载源码
1

没有需要删除的,新增就行

<!-- Spring Aop -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
</dependency>

运行项目并下载源码
xml
1
2
3
4
5
6
2.2、Java Servlet --> jakarta Servlet


<!-- jakarta Servlet -->
<dependency>
     <groupId>jakarta.servlet</groupId>
     <artifactId>jakarta.servlet-api</artifactId>
 </dependency>
运行项目并下载源码
xml
1
2
3
4
5
2.3、新增 mybatis-spring
运行项目并下载源码
1
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
</dependency>
运行项目并下载源码
xml
1
2
3
4
三、修改common-datasource pom文件
3.1、修改 Druid
运行项目并下载源码
1
版本号是
<druid.version>1.2.23</druid.version>
<dynamic-ds.version>4.3.1</dynamic-ds.version>



四、java 代码修改
4.1、import javax --> import jakarta
运行项目并下载源码
1
这个整个项目替换吧,个别换了之后可能会飘红说不存在,把报错的改回javax就好了,文件太多了。就不一一举例了;

4.1、WebSecurityConfigurer 替换
运行项目并下载源码
1
其实改动不大,就是语法换了一下;如果项目中之前没怎么改过,直接复制吧。我给下对比图(屏幕小了。截不全。基本可以直接复制代码用的);其他的好像没有要替换的,我也是整了几天才给整明白,后面才想起来写一下csdn的;


package com.ruoyi.modules.monitor.config;

import de.codecentric.boot.admin.server.config.AdminServerProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.Customizer;
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.annotation.web.configurers.HeadersConfigurer;
import org.springframework.security.web.SecurityFilterChain;
import org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler;

/**
 * 监控权限配置
 * 
 * @author bty
 */
@EnableWebSecurity
@Configuration
public class WebSecurityConfigurer
{
    private final String adminContextPath;

    public WebSecurityConfigurer(AdminServerProperties adminServerProperties)
    {
        this.adminContextPath = adminServerProperties.getContextPath();
    }

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity httpSecurity) throws Exception
    {
        SavedRequestAwareAuthenticationSuccessHandler successHandler = new SavedRequestAwareAuthenticationSuccessHandler();
        successHandler.setTargetUrlParameter("redirectTo");
        successHandler.setDefaultTargetUrl(adminContextPath + "/");

        return httpSecurity.headers((header) -> header.frameOptions(HeadersConfigurer.FrameOptionsConfig::disable))
                .authorizeHttpRequests(
                        (authorize) -> authorize
                                .requestMatchers(adminContextPath + "/assets/**",
                                        adminContextPath + "/login",
                                        adminContextPath + "/actuator/**",
                                        adminContextPath + "/instances/**")
                                .permitAll()
                                .anyRequest()
                                .authenticated())
                .formLogin((formLogin) -> formLogin.loginPage(adminContextPath + "/login").successHandler(successHandler))
                .logout((logout) -> logout.logoutUrl(adminContextPath + "/logout"))
                .httpBasic(Customizer.withDefaults())
                .csrf(AbstractHttpConfigurer::disable)
                .build();
    }
}

运行项目并下载源码
java
运行

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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
五、修改redis配置
spring.redis配置为spring.data.redis;如下,自行去nacos里面改吧;不然会报redis连接不上;

spring:
  data:
    redis:
      ......
运行项目并下载源码
yaml
1
2
3
4
六、jdk版本更换
springcloud目前最高支持JDK17.所以想玩23的先缓一缓吧(我刚打完这行字,又去搜了下,发现springcloud 2024已经支持JDK23 了。后面如果要升级再说吧)

6.1、项目更换JDK17
运行项目并下载源码
1
项目里面快捷键–> ctrl+alt+shift+s 打开 Project Structure
project 修改JDK17

Modules 修改JDK17

6.2、编译方式更换JDK17

项目里面快捷键–> ctrl+alt+s 打开 Settings,找到 Build,Execution,Deployment / Compiler / Java Compiler 如下图,全部换成17



七、升级途中发现的报错及处理方法
正常情况下按照文档来,应该不会出错,因为我也是一步步的坑踩过来的;分享下我遇到的错误及解决办法吧,有些可能没有截图;

7.1、SLF4J 提示报错:SLF4J: No SLF4J providers were found
运行项目并下载源码
1
SLF4J: No SLF4J providers were found.
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See SLF4J Error Codes for further details.
运行项目并下载源码
java
运行
1
2
3
百度上有很多种说法,基本都是包冲突,这里如果用到了logback,升级下版本号就好;1.1 的章节有说;

7.2、Invalid value type for attribute ‘factoryBeanObjectType‘: java.lang.String
运行项目并下载源码
1
看1.3、升级mybatis-spring;就可以了;

7.3、Name for argument of type [java.lang.String] not specified, and parameter name information not available via reflection. Ensure that the compiler uses the '-parameters' flag.
运行项目并下载源码
1
我发现的第一个错误是这里,原因的话我觉得这个文章写的可以,大家有兴趣的话可以看看
https://www.jb51.net/program/320041b2r.htm

/**
     * 根据字典类型查询字典数据信息
     */
    @GetMapping(value = "/type/{dictType}")
    public AjaxResult dictType(@PathVariable String dictType)
    {
        List<SysDictData> data = dictTypeService.selectDictDataByType(dictType);
        if (StringUtils.isNull(data))
        {
            data = new ArrayList<SysDictData>();
        }
        return success(data);
    }
运行项目并下载源码
java
运行

1
2
3
4
5
6
7
8
9
10
11
12
13
快速解决方法:

新增
<compilerArgs><arg>-parameters</arg></compilerArgs>

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
     <artifactId>maven-compiler-plugin</artifactId>
     <version>3.11.0</version>
     <configuration>
         <source>${java.version}</source>
         <target>${java.version}</target>
         <encoding>${project.build.sourceEncoding}</encoding>
         <compilerArgs>
             <arg>-parameters</arg>
————————————————
版权声明:本文为CSDN博主「Fate渔民」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/l962464k/article/details/144966055