• JeecgBoot 框架升级至 Spring Boot3 的实战步骤


    JeecgBoot 框架升级 Spring Boot 3.1.5 步骤

    JEECG官方推出SpringBoot3分支:

    https://github.com/jeecgboot/jeecg-boot/tree/springboot3

    本次更新由于属于破坏式更新,有几个生态内的组件,无法进行找到平替或无法升级,目前尚不完善,部分功能选择直接注释的方式,以下为功能列表

    • Online功能
    • 积木报表功能
    • 仪表盘功能
    • spring cloud gateway 的 SentinelFilterContextConfig 过滤器

    Spring Boot

    从 2.7.10升级到3.1.5有以下几个点需要注意。

    • JDK版本支持从JDK 17-19版本
    • javax.servlet切换到jakarta.servlet
    • spring.redis配置切换为spring.data.redis
    • Spring Cloud 2022.0.4
    • Spring Cloud Alibaba 2022.0.0.0

    除以上三点外,其它都是平滑升级,不过这也只是相对于我们应用Spring Boot的用户来说。不过对于第二点,属于是破坏性升级了,需要将项目中引用的javax.servlet替换成jakarta.servlet。

    spring boot升级参考文档:
    https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.0-Migration-Guide

    spring cloud升级参考文档:
    https://docs.spring.io/spring-cloud/docs/current/reference/html/

    spring cloud alibaba升级参考文档:
    https://sca.aliyun.com/zh-cn/docs/2022.0.0.0/overview/version-explain

    Shiro

    前面讲到由于Spring Boot内部的servlet包换掉了,jeecg框架使用shiro以及spring boot集成,所以shiro需要升级,不过还好shiro官方给这个点提供了支持,以下是shiro的升级替换。

    需要注意的是,spring boot 3.1.5对jedis的版本做了提升,提升后shiro无法兼容,所以只能在项目进行降版本处理。

    shiro升级参考文档:
    https://blog.csdn.net/weixin_43492211/article/details/131217344

    
    		<dependency>
    			<groupId>org.apache.shirogroupId>
    			<artifactId>shiro-spring-boot-starterartifactId>
    			<version>${shiro.version}version>
    			<exclusions>
    				<exclusion>
    					<groupId>org.apache.shirogroupId>
    					<artifactId>shiro-springartifactId>
    				exclusion>
    			exclusions>
    		dependency>
    		
    		<dependency>
    			<groupId>org.crazycakegroupId>
    			<artifactId>shiro-redisartifactId>
    			<version>${shiro-redis.version}version>
    			<exclusions>
    				<exclusion>
    					<groupId>org.apache.shirogroupId>
    					<artifactId>shiro-coreartifactId>
    				exclusion>
    				<exclusion>
    					<artifactId>checkstyleartifactId>
    					<groupId>com.puppycrawl.toolsgroupId>
    				exclusion>
    			exclusions>
    		dependency>
    		
    		<dependency>
    			<groupId>redis.clientsgroupId>
    			<artifactId>jedisartifactId>
    			<version>2.9.0version>
    		dependency>
    
    		<dependency>
    			<groupId>org.apache.shirogroupId>
    			<artifactId>shiro-springartifactId>
    			<classifier>jakartaclassifier>
    			<version>${shiro.version}version>
    			
    			<exclusions>
    				<exclusion>
    					<groupId>org.apache.shirogroupId>
    					<artifactId>shiro-coreartifactId>
    				exclusion>
    				<exclusion>
    					<groupId>org.apache.shirogroupId>
    					<artifactId>shiro-webartifactId>
    				exclusion>
    			exclusions>
    		dependency>
    		
    		<dependency>
    			<groupId>org.apache.shirogroupId>
    			<artifactId>shiro-coreartifactId>
    			<classifier>jakartaclassifier>
    			<version>${shiro.version}version>
    		dependency>
    		<dependency>
    			<groupId>org.apache.shirogroupId>
    			<artifactId>shiro-webartifactId>
    			<classifier>jakartaclassifier>
    			<version>${shiro.version}version>
    			<exclusions>
    				<exclusion>
    					<groupId>org.apache.shirogroupId>
    					<artifactId>shiro-coreartifactId>
    				exclusion>
    			exclusions>
    		dependency>
    

    knife4j

    knife4j对于spring boot 3.X版本提供了支持,不过相当于spring boot 2.X的版本来说,差异比较大,从springfox转换成了springdoc,不能做到平滑升级,以下是需要替换的注解列表.

    knife4j升级参考文档:

    https://doc.xiaominfo.com/docs/quick-start/start-knife4j-version#22-spring-boot-3x

    https://springdoc.org/#migrating-from-springfox

    • @Api@Tag
    • @ApiIgnore@Parameter(hidden = true) or @Operation(hidden = true) or @Hidden
    • @ApiImplicitParam@Parameter
    • @ApiImplicitParams@Parameters
    • @ApiModel@Schema
    • @ApiModelProperty(hidden = true)@Schema(accessMode = READ_ONLY)
    • @ApiModelProperty@Schema
    • @ApiOperation(value = "foo", notes = "bar")@Operation(summary = "foo", description = "bar")
    • @ApiParam@Parameter
    • @ApiResponse(code = 404, message = "foo")@ApiResponse(responseCode = "404", description = "foo")

    同样在初始化文档对象上也有区别,以下前后替换

    [@Bean](https://my.oschina.net/bean)
        public GroupedOpenApi swaggerOpenApi() {
            return GroupedOpenApi.builder()
                    .group("default")
                    .packagesToScan("org.jeecg")
                    .build();
        }
    
        [@Bean](https://my.oschina.net/bean)
        public OpenAPI customOpenAPI() {
            return new OpenAPI()
                    .info(new Info()
                            .title("JeecgBoot 后台服务API接口文档")
                            .version("1.0")
                            .contact(new Contact().name("北京国炬信息技术有限公司").url("www.jeccg.com").email("jeecgos@163.com"))
                            .description( "后台API接口")
                            .termsOfService("NO terms of service")
                            .license(new License().name("Apache 2.0").url("http://www.apache.org/licenses/LICENSE-2.0.html"))
                    );
        }
    
    
    // ---------------------------替换后---------------------
    
        [@Bean](https://my.oschina.net/bean)
        public GroupedOpenApi swaggerOpenApi() {
            return GroupedOpenApi.builder()
                    .group("default")
                    .packagesToScan("org.jeecg")
                    .build();
        }
    
        [@Bean](https://my.oschina.net/bean)
        public OpenAPI customOpenAPI() {
            return new OpenAPI()
                    .info(new Info()
                            .title("JeecgBoot 后台服务API接口文档")
                            .version("1.0")
                            .contact(new Contact().name("北京国炬信息技术有限公司").url("www.jeccg.com").email("jeecgos@163.com"))
                            .description( "后台API接口")
                            .termsOfService("NO terms of service")
                            .license(new License().name("Apache 2.0").url("http://www.apache.org/licenses/LICENSE-2.0.html"))
                    );
        }
    

    升级的maven地址:

    		<dependency>
    			<groupId>com.github.xiaoymingroupId>
    			<artifactId>knife4j-openapi3-jakarta-spring-boot-starterartifactId>
    			<version>4.3.0version>
    		dependency>
    

    在knife4j 4.X版本中,首次在对swagger文档与spring cloud gateway进行了整合,提供完整的解决方案,做到了开箱即用,以下是应用案例,在jeecg中也得到了升级。

            <dependency>
                <groupId>com.github.xiaoymingroupId>
                <artifactId>knife4j-gateway-spring-boot-starterartifactId>
                <version>4.3.0version>
            dependency>
    

    spring boot 3.x 生态增强平滑升级

    以下为平滑升级,即更换版本即可,不需要做任何调整,jeecg框架调整如下

    		
    		<dependency>
    			<groupId>com.alibabagroupId>
    			<artifactId>druid-spring-boot-3-starterartifactId>
    			<version>1.2.20version>
    		dependency>
    
    		
    		<dependency>
    			<groupId>com.baomidougroupId>
    			<artifactId>dynamic-datasource-spring-boot3-starterartifactId>
    			<version>4.1.3version>
    		dependency>
    
    		
    		<dependency>
                <groupId>de.codecentricgroupId>
                <artifactId>spring-boot-admin-starter-serverartifactId>
                <version>3.0.4version>
            dependency>
    
  • 相关阅读:
    Solon for JDK 21,虚拟线程逆天!!!
    信息化与信息系统3
    计算机毕业设计ssm图书馆管理系统z3z90系统+程序+源码+lw+远程部署
    线程同步—— 生产者与消费者、龟兔赛跑、双线程打印
    专业修图软件 Affinity Photo 2 mac中文版编辑功能
    直播和短视频美颜sdk的开发流程、代码分析
    CI/CD
    C++设计模式_08_Factory Method工厂方法模式
    【ES6】
    CmakeLists.txt配置Eigen
  • 原文地址:https://www.cnblogs.com/jeecg158/p/17877119.html