从Spring迁移到Spring Boot

使用 OpenRewrite 简化 Java 和 Spring Boot 迁移 通过自动化的迁移规则,开发者可以轻松进行 Java 版本升级、Spring Boot 版本升级、库替换等任务,从而节省了大量的时间和精力。尤其是对于 Java 和 Spring Boot 项目,随着技术的更新和新特性的发布,保持项目的现代化是非常必要的。然而,进行版本升级和迁移可能会涉及大量的手动修改代码和配置,尤其是在大型项目中,迁移的复杂度和成本往往令人头疼。Spring Boot 是一个非常流行的框架,每个新版本都会带来很多新特性和改进,但每个版本的升级也可能会导致大量的配置变更和 API 变动。 阅读详情

在本文中,我们将研究如何将现有的Spring框架应用程序迁移到SpringBoot应用程序。

Spring Boot并不是为了取代Spring,而是为了使使用它更快更容易。因此,迁移应用程序所需的大多数更改都与配置有关。在大多数情况下,我们的自定义控制器和其他组件将保持不变。

使用Spring Boot进行开发有几个优点:

  • 更简单的依赖关系管理
  • 默认自动配置
  • 嵌入式web服务器
  • 应用程序度量和运行状况检查
  • 高级外部化配置

Spring Boot Starters

首先,我们需要一组新的依赖项。 springboot提供了方便的starter依赖项 ,这些依赖项描述符可以为某些功能引入所有必要的技术。

这样做的好处是,您不再需要为每个依赖项指定版本,而是让初学者为您管理依赖项。

最快的入门方法是添加springbootstarter父级 pom.xml :

<parent>
    <groupId>org.<a href="https://javakk.com/tag/spring" title="查看更多关于 spring 的文章" target="_blank">spring</a>framework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.6.RELEASE</version>
</parent>

这将负责依赖关系管理。

我们希望删除任何显式定义的依赖版本,它也由springboot管理。否则,我们可能会遇到定义的版本和Boot使用的版本之间的不兼容。

应用程序入口点

使用springboot构建的每个应用程序都需要定义主入口点。这通常是一个带有 main 方法的Java类,用 @SpringBootApplication 注释:

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

@SpringBootApplication 注释添加了以下注释:

@Configuration
@EnableAutoConfiguration
@ComponentScan

默认情况下, @SpringBootApplication 注释扫描同一个包或以下包中的所有类。因此,方便的包结构可以如下所示:

如果您的应用程序是创建ApplicationContext的非web应用程序,则可以删除此代码并用上面的 @SpringBootApplication 类替换。

我们可能遇到的问题有多个配置类冲突。为了避免这种情况,我们可以过滤扫描的类:

@SpringBootAppliaction
@ComponentScan(excludeFilters = { 
  @ComponentScan.Filter(type = FilterType.REGEX, 
  pattern = "com.baeldung.config.*")})
public class Application {
    //...
}

导入配置和组件

springboot在很大程度上依赖于注释进行配置,但是您仍然可以以注释和XML格式导入现有配置。

对于要获取的现有 @Configuration 或 component 类,有两个选项:

  • 将现有类移到与主应用程序类包相同或低于主应用程序类包的包中
  • 显式导入类

要显式导入类,可以在主类上使用 @ComponentScan 或 @import 注释:

@SpringBootApplication
@ComponentScan(basePackages="com.baeldung.config")
@Import(UserRepository.class)
public class Application {
    //...
}

官方文档建议在XML配置上使用注释。但是,如果已经有不希望转换为Java配置的XML文件,您仍然可以使用 @ImportResource :

@SpringBootApplication
@ImportResource("applicationContext.xml")
public class Application {
    //...
}

迁移应用程序资源

默认情况下,Spring Boot会在以下位置之一查找资源文件:

  • /resources
  • /public
  • /static
  • /META-INF/resources

要迁移,我们可以将所有资源文件移动到其中一个位置,也可以通过设置 spring.resources.static-locations 属性:

spring.resources.static-locations=classpath:/images/,classpath:/jsp/

迁移应用程序属性

框架将自动加载在名为 application.properties 或者 application.yml 放置在以下位置之一:

  • 当前目录的a/config子目录
  • 当前目录
  • 类路径上的/config目录
  • 类路径根

为了避免显式加载属性,我们可以将它们移动到这些位置之一具有此名称的文件中。例如,放入类路径上应该存在的/resources文件夹中。

我们还可以从名为 application-{profile}.properties 的文件中自动加载特定于概要文件的属性。

此外,大量预定义的属性名可用于配置不同的应用程序行为。

在应用程序中使用的每个Spring框架模块都需要稍加修改,主要与配置有关。让我们看看一些最常用的功能。

迁移SpringWeb应用程序

Web Starter

springboot为web应用程序提供了一个启动程序,它将引入所有必要的依赖关系。这意味着我们可以从Spring框架中删除所有特定于web的依赖项,并用Spring boot starter web替换它们:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

由于Spring Boot会尽可能根据类路径自动配置应用程序,因此添加此依赖关系将导致将 @EnableWebMvc 注释添加到主应用程序类,并设置 DispatcherServlet bean 。

如果您有一个 WebApplicationInitializer 类来设置 DispatcherServlet ,则不再需要它, @EnableWebMvc 注释也不再需要。

当然,如果需要自定义行为,我们可以定义bean,在这种情况下,将使用bean。

如果我们在 @Configuration 类上显式使用 @EnableWebMvc 注释,那么MVC自动配置将不再被启用。

添加web starter还确定以下bean的自动配置:

  • 支持从类路径上名为/static、/public、/resources或/META-INF/resources的目录提供静态内容
  • HttpMessageConverter bean,用于JSON和XML等常见用例
  • 处理所有错误的错误映射

View Technologies

至于构建网页,官方文档建议不要使用JSP文件,而是使用模板引擎。自动配置包括以下模板引擎:Thymeleaf、Groovy、FreeMarker、Mustache。要使用其中一个,我们只需添加特定的启动程序:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

模板文件应放在 /resources/templates 文件夹中。

如果我们想继续使用JSP文件,我们需要配置应用程序以便它能够解析JSP。例如,如果文件位于 /webapp/WEB-INF/views 中,则需要设置以下属性:

spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp

嵌入式Web服务器

此外,我们还可以使用嵌入式Tomcat服务器运行应用程序,通过添加spring boot starter Tomcat依赖项,该服务器将在端口 8080 上自动配置:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>

springboot提供自动配置的其他web服务器有Jetty和Undertow。

迁移Spring Security应用程序

启用Spring Security的启动程序是 Spring boot starter Security :

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

默认情况下,这将创建一个名为“ user ”的用户,并在启动期间记录一个随机生成的密码,并使用基本身份验证保护所有端点。但是,我们通常希望添加我们的安全配置,这与默认配置不同。

因此,我们将使用 @EnableWebSecurity 对现有类进行注释,它扩展了 WebSecurityConfigurerAdapter 并定义了一个自定义配置:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    // ...
}

迁移Spring Data应用程序

根据我们使用的Spring数据实现,我们需要添加相应的启动程序。例如,对于JPA,我们可以添加spring boot starter数据JPA依赖项:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

如果要使用内存中的数据库,请为H2、Derby和HSQLDB类型的数据库添加相应的启用依赖关系的自动配置。

例如,要使用内存中的H2数据库,我们只需要H2依赖关系:

<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
</dependency>

如果我们想使用不同的数据库类型和配置,比如MySQL数据库,那么我们需要依赖关系以及定义配置。

为此,我们可以保留数据源bean定义,也可以使用预定义属性:

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/myDb?createDatabaseIfNotExist=true
spring.datasource.username=user
spring.datasource.password=pass

springboot将自动配置Hibernate作为默认的JPA提供者,以及transactionmanagerbean。

结论

在本文中,我们展示了将现有Spring应用程序迁移到较新的Spring引导框架时遇到的一些常见场景。

总的来说,迁移时的体验当然会高度依赖于所构建的应用程序。

 

Spring Boot 快速迁移至 Quarkus Quarkus 是一个目前非常火的 Java 应用开发框架,定位是轻量级的微服务框架。,Quarkus 提供了优秀的容器化整合能力,相较于传统开发框架(Spring Boot)有着更快的启动速度、更小的内存消耗、更短的服务响应。本文将演示将 SpringBoot 迁移至 Quarkus Spring Boot 示例程序 使用 JPA 完成 数据库的增删改查操作,基础代码如下 maven 依赖 org.springframework.boot spring-boot-starter-data-jpa org 阅读详情

相关推荐

如何在Spring Boot中实现数据库迁移?

在Spring Boot中实现数据库迁移有多种方式,其中最常用的是使用Flyway或Liquibase这两个工具。下面将分别介绍这两种工具的基本使用方法。

Pmyx_wyh的博客 1138

进化,从Spring到SpringBoot

Spring本身配置的重量化 Spring web项目的配置太多 微服务的萌芽阶段,需要一个轻量级框架 springmvc项目 springboot 在约定优于配置理念下,是 springframework 的脚手架,快速高效的构建应用。 上半节课 Spring Springboot 搭建两个工程 下半节课 ...

毛毛的专栏 3895

后端开发:Spring Boot的数据库迁移方案

在现代应用开发中,数据库模式(Schema)的变更管理是一个关键挑战。本文旨在全面介绍Spring Boot生态系统中数据库迁移的解决方案,帮助开发团队建立可靠的数据库变更管理流程。内容涵盖从基础概念到高级应用场景,特别关注生产环境中的最佳实践。文章首先介绍数据库迁移的核心概念,然后深入分析两种主流工具(Flyway和Liquibase)的实现原理。接着通过实际代码示例展示具体应用,最后讨论高级主题和未来趋势。每个部分都包含详细的解释和实用建议。数据库迁移(Database Migration)

架构师的AI之路,分享AI应用开发架构的学习与实践。 1126

如何将现有的Spring框架应用程序迁移到SpringBoot应用程序

在本文中,我们将研究如何将现有的Spring框架应用程序迁移到SpringBoot应用程序。 Spring Boot并不是为了取代Spring,而是为了使使用它更快更容易。因此,迁移应用程序所需的大多数更改都与配置有关。在大多数情况下,我们的自定义控制器和其他组件将保持不变。 使用Spring Boot进行开发有几个优点: 更简单的依赖关系管理 默认自动配置 嵌入式web服务器 应用程序度量和运行状况检查 高级外部化配置 Spring Boot Starters 首先,我们需要一组新的依赖项

Java架构师之路的博客 806

Spring项目改成SpringBoot项目

最近到公司实习,被安排了一个活是将一个spring的html5项目改成springboot项目做二次开发,orm用的mybatis,页面Jsp。由于对项目的不熟悉导致产生了很多bug,最后在学长的帮助下终于完成了任务,简单介绍一下我的修改过程。 一、新建一个springboot项目 二、将原来项目的代码都搬进来 三、在pom中添加依赖,可以从原pom文件复制过来,将里面与spring相关的依赖删掉(例如下图中的依赖) 四、在resources的application.properties文件中添加数据

m0_54853503的博客 4585

Spring+jsp老项目转Springboot的示例Demo

指导如何将Spring+jsp老项目转Springboot的示例Demo,是以最小化配置方式,访问每个页面不需要经过控制层解释,只需要配置一个JspServlet拦截所有Jsp页面即可。

如何由Spring转变为SpringBoot

spring框架项目编程springboot框架项目

MCCdds的博客 1211

微型纵向加密在新能源场站中的实战部署与运维避坑指南

本文详细解析了微型纵向加密在新能源场站中的实战部署与运维技巧。通过国密算法SM4实现数据加密,确保新能源场站通信安全,同时提供非侵入式部署方案和运维避坑指南,帮助提升网络稳定性和运维效率。

weixin_30505225的博客 541

Spring Web工程最快转Spring Boot工程方法

删除web.xml 导入springboot pom.xml 添加springboot 启动代码(举例) import java.io.IOException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.CommandLineRunner; import ...

爱码少年 00fly.online 的博客 2万+

从Spring迁移到Spring Boot的方法步骤

从Spring迁移到Spring Boot Spring Boot给我们的开发提供了一系列的便利,所以我们可能会希望将老的Spring 项目转换为新的Spring Boot项目,本篇文章将会探讨如何操作。 请注意,Spring Boot并不是取代Spring,它只是添加了一些自动配置的东西,从而让Spring程序更快更好 添加Spring Boot starters 要想添加Spring Boot,最简单的办法就是添加Spring Boot Starters。 <parent> <

p1830095583的博客 2275

Jenkins+docker 微服务实现自动化部署安装和部署过程

本文详细介绍了如何使用Docker部署Jenkins自动化服务器。主要内容包括:1)拉取Jenkins官方或BlueOcean镜像;2)创建容器并配置端口映射、数据卷挂载;3)设置防火墙规则;4)配置清华大学镜像加速;5)安装必要插件;6)SSH密钥配置;7)构建触发器设置;8)编写自动化构建脚本。通过Docker部署Jenkins可以简化安装流程,确保环境一致性,并利用容器特性实现快速启动和管理。文章提供了完整的配置步骤和注意事项,帮助用户快速搭建CI/CD环境。

qq_33665793的博客 1651

Spring Boot,迁移到功能

在最近几年中,出现了一些针对框架的推后推,更具体地说是注解: 有人称其为magic ,并声称很难理解应用程序的流程。 了解一些主要框架是开发人员工作的恕我直言。 但是,当注释比实际代码多时,很难争辩使用注释。 与编程一样,没有什么是黑白的。 一些特定用法比实际意义更大,尤其是与文档相关的用法。 @Transactional注释自然是我想到的一种:它不仅使注释方法具有事务性,而且在文档中...

dlz00001的博客 176

从网口变压器到TVS管:手把手设计通过4KV浪涌的以太网电路

本文详细解析工业级以太网接口4KV浪涌防护设计,从网口变压器选型到TVS管布局,提供通过IEC61000-4-5标准测试的完整方案。重点介绍Bob Smith电路优化和PCB设计技巧,帮助工程师有效应对雷电感应和设备开关瞬态干扰,确保工业设备稳定运行。

study的专栏 233

此项目需要迁移_如何将项目迁移至 Spring Boot 2.0 ?

点击上方蓝色字体,选择“置顶公众号”优质文章,第一时间送达作者 |oschina链接 | oschina.net/translate/spring-boot-2-0-migration-guide前言官方宣布于 2019/08/01不再更新维护Spring Boot 1.5x 版本,建议迁移到2.0。近日有读者询问久一如何进行迁移,其实官方早就发布文档供开发者参考迁移,发布的是英文...

weixin_39826089的博客 235

Spring Boot 2.7x 到 Spring Boot 3.0 迁移指南

本文档提供了从Spring Boot 2.7.x迁移至3.0版本的详细指南。主要内容包括:升级前的准备工作(确保升级到最新2.7.x版本、检查依赖项兼容性、Spring Security调整等);升级过程中的关键步骤(配置属性迁移工具使用、Jakarta EE适配);以及核心变更说明(日志格式调整、自动配置注册方式变更等)。特别针对Web应用,重点介绍了URL匹配规则变更和HTTP头部大小属性的统一处理。文档强调Spring Boot 3.0要求Java 17+环境,并移除了2.x版本中所有废弃功能。通过系

program哲学 511

2025年上半年第1批信息系统项目管理师论文真题解析与范文

文章首先分析了项目经理在交付绩效域中应关注的重点领域,然后按照项目管理五大过程组顺序,阐述了各过程组中与交付绩效域协同的绩效域及协调目标,最后制定了各过程组中交付绩效域的测量指标。本项目的实践表明,系统化的交付绩效管理不仅能保证项目成功,还能创造超出预期的业务价值。需要结合具体项目案例,按照五大过程组(启动、规划、执行、监控、收尾)顺序,分析各过程组中与交付绩效域协同的其他绩效域及其协调目标。价值交付连续性:建立敏捷交付机制,将项目分解为12个迭代周期,每周期交付可验证成果,确保价值持续流动。

Programming Talk 796

Spring Boot 2.0的指标-迁移

我已经 写过关于Spring Boot中出色的监视功能的文章 。 在Spring Boot 2.0中,对/metrics HTTP端点的设计进行了重大重写。 最重要的是,现在有一个专门用于度量的项目,称为Micrometer 。 在本文中,我将介绍如何将应用程序从Spring Boot 1.5迁移到Micrometer。 通过使用micrometer-spring-legacy依赖关系...

dlz00001的博客 323

第三方 API 调用 OpenClaw 出现 LLM request timed out 的解决方案

本文主要介绍了第三方 API 调用 OpenClaw 出现 LLM request timed out 的解决方案,希望能对使用OpenClaw的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 8万+

从Hystrix到Resilience4j:Spring Boot 2应用的高可用迁移指南

# 从Hystrix到Resilience4j:Spring Boot 2应用的高可用迁移指南 你是否还在为Hystrix停止维护而担忧服务稳定性?当流量突增时,你的微服务架构是否频繁出现级联故障?本文将带你一步到位完成从Hystrix到Resilience4j的迁移,让你的Spring Boot应用在复杂网络环境中稳如磐石。读完本文,你将掌握: - 快速替换Hystrix注解的实操方案 - ...

gitblog_00403的博客 954

Spring Boot 2.0 迁移指南

前提 本文档将帮助您把应用程序迁移到 Spring Boot 2.0。 在你开始之前 首先,Spring Boot 2.0需要Java 8或更高版本。Java 6 和 7 不再受支持。 在 Spring Boot 2.0 中,许多配置属性被重新命名/删除,开发人员需要更新application.properties/ application.yml相应的配置。为了帮助你,Spring Bo...

sincegc的博客 276

常用元器件使用方法3:电平转换芯片74LVC1T45的使用方法

介绍: 74LVC1T45是一个单位双向可控电平转换芯片。   芯片特性: 1、宽供给电压范围:1.65V到5.5V; 2、3.3V时,可输出24mA电流; 3、最大16uA电能损耗; 4、高噪音抑制;   型号:   引脚: VCC(A) 1 A端和DIR电源 GND 2 地 A 3 数据输入/输出 B 4 ...

snmplink的博客 1万+

Spring Boot 2 升级 Spring Boot 3 踩坑实战:MyBatis-Plus、MySQL、Redis 迁移总结

文章摘要 Spring Boot 2升级到Spring Boot 3是一次涉及JDK、Spring框架和Jakarta EE的全方位迁移。升级路径建议先从Spring Boot 2.x升级到2.7.x,解决兼容性问题后再迁移到3.x。关键注意事项包括:JDK必须升级到17+;javax包名全面改为jakarta;MyBatis-Plus需使用专用starter(mybatis-plus-spring-boot3-starter);MySQL驱动坐标改为com.mysql:mysql-connector-j;

m0_60277481的博客 493

YOLO模型轻量化实战:剪枝、量化与知识蒸馏三大技术落地详解

这篇文章结合我自己的实战经验,从原理、操作、效果、避坑四个方面,给大家讲清楚了YOLO模型轻量化的三大核心技术:剪枝、量化、知识蒸馏。先明确应用场景,再选择合适的技术组合,不要盲目追求极致压缩,要在“大小、速度、精度”之间找平衡。实战才是最好的学习方式——大家可以先拿自己的数据集试试剪枝和量化,感受一下效果,有问题可以在评论区留言。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 555

如何从 Java 8/11 迁移到 Java 21,从 Spring Boot 2 迁移到最新的3.2

如果您的工作配置与 Java 有一定的关系,您一定已经注意到 了Java 最新稳定版本 Java 21 引起了很多关注。这个新版本引入了一些未来的功能,改进了之前引入/孵化的一些突破性功能,弃用了多余的功能,并删除了一些错误。它使 Java 更具竞争力和活力,与其他流行的编程语言保持同步。现代软件应用程序及其使用模式需要非常高的效率、安全性、吞吐量和可扩展性。随着软件开发范式的发展以满足这些需求(和威胁),流行的语言也在不断发展,而 Java 自然也不甘落后。

z1ztai的博客 1467
上一篇: SOA和微服务的各自特点是什么?
下一篇: 领域驱动设计示例
JavaShark
博客等级 码龄4年 183粉丝 438原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值