在本文中,将了解如何将现有的SpringFramework应用程序迁移到SpringBoot应用程序。
SpringBoot不是为了取代Spring,而是为了更快更容易地使用Spring。因此,迁移应用程序所需的大多数更改都与配置有关。
使用SpringBoot进行开发带来了几个优点:
更简单的依赖管理
默认自动装配
嵌入式Web服务器独立运行
应用程序指标和健康检查
高级外部化配置
2.SpringBootStarters极速开始项
首先,需要一组新的依赖项。SpringBoot提供了极速开始依赖项,这些依赖项可以为某些功能引入所有必需的技术。
这些优点是不再需要为每个依赖项指定版本,而是让极速开始项预置了依赖。
最快的入门方法是添加spring-boot-starter-parent到pom.xml:
spring-boot-starter-parent负责依赖管理。
3.启动入口
使用SpringBoot构建的每个应用程序都需要定义主入口点。这通常是带有main方法的Java类,使用@SpringBootApplication注解:
@SpringBootApplicationpublicclassApplication{publicstaticvoidmain(String[]args){SpringApplication.run(Application.class,args);}}
该@SpringBootApplication注解包含以下注解:
@EnableAutoConfiguration-告诉框架自动根据类路径的依赖关系添加bean
@ComponentScan-扫描与Application类或更低版本相同的包中的其他配置和bean
默认情况下,@SpringBootApplication注解会自动扫描同一个包或下级本中的所有类。因此,方便的包结构可能如下所示:
如果应用程序是创建ApplicationContext的非Web应用程序,则可以删除此代码并替换为上面的@SpringBootApplication类。
可能遇到的问题有多个配置类冲突。为避免这种情况,可以过滤扫描的类:
@SpringBootAppliaction@ComponentScan(excludeFilters={@ComponentScan.Filter(type=FilterType.REGEX,pattern="com.baeldung.config.*")})publicclassApplication{//...}
4.导入配置和组件
SpringBoot在很大程度上依赖于配置注解,但仍然可以以注解和XML格式导入现有配置。
要获取现有的@Configuration或组件类,有两种选择:
将现有类移动到与主Application类包相同或下级的包
显示导入类
要显式导入类,可以在主类上使用@ComponentScan或@Import注解:
@ComponentScan(basePackages="com.baeldung.config")@Import(UserRepository.class)publicclassApplication{//...}
官方文档建议在XML配置上使用注解。但是,如果已经有XML文件,不希望转换为Java配置,仍然可以使用@ImportResource导入它们:
@ImportResource("applicationContext.xml")publicclassApplication{//...}
5.迁移应用程序资源
默认情况下,SpringBoot会在以下位置之一中查找资源文件:
/resources
/public
/static
/META-INF/resources
要迁移,可以将所有资源文件移动到其中一个位置,或者可以通过设置spring.resources.static-locations属性来自定义资源位置:
spring.resources.static-locations=classpath:/images/,classpath:/jsp/
6.迁移应用程序属性
该框架将自动加载在其中一个位置放置的名为application.properties或application.yml的文件中定义的任何属性:
当前目录的a/config子目录
当前目录
类路径上的a/config目录
类路径根
为避免显式加载属性,可以将它们移动到其中一个位置具有此名称的文件。例如,进入应该出现在类路径上的/resources文件夹中。
还可以从名为application-{profile}.properties的文件中自动加载特定环境的配置文件的属性。
此外,大量预定义属性名称可用于配置不同的应用程序行为。
在应用程序中使用的每个Spring框架模块都需要稍作修改,主要与配置有关。来看看一些最常用的功能。
7.迁移SpringWeb应用程序
SpringBoot为Web应用程序提供了一个启动器,它将引入所有必需的依赖项。这意味着可以从Spring框架中删除所有特定于Web的依赖项,并将其替换为spring-boot-starter-web:
由于SpringBoot尝试根据类路径尽可能自动配置应用程序,因此添加此依赖项将导致将@EnableWebMvc注解添加到主Application类,以及设置DispatcherServlet。
如果有一个设置DispatcherServlet的WebApplicationInitializer类,则不再需要它,@EnableWebMvc注解也不再需要。
如果有一个自定义行为,可以定义的bean,在这种情况下,将使用的bean。
如果在@Configuration类上显式使用@EnableWebMvc注解,则将不再启用MVC自动配置。
添加Web启动程序还会确定以下Bean的自动配置:
支持从类路径上名为/static,/public,/resources或/META-INF/resources的目录提供静态内容
HttpMessageConverter用于常见用例,如JSON和XML
处理所有错误的/error映射
就渲染网页而言,官方文档建议不要使用JSP文件模板引擎。使用以下模板引擎包含自动配置:Thymeleaf,Groovy,FreeMarker,Mustache。需要做的就是使用其中一个添加特定的starter:
<>
模板文件应放在/resources/templates文件夹中。
如果想继续使用JSP文件,需要配置应用程序以便它可以解析JSP。例如,如果的文件位于/webapp/WEB-INF/views中,那么需要设置以下属性:
spring.mvc.view.prefix=/WEB-INF/views/spring.mvc.view.suffix=.jsp
7.3。嵌入式Web服务器:spring-boot-starter-tomcat
此外,还可以使用嵌入式Tomcat服务器运行的应用程序,该服务器将通过添加spring-boot-starter-tomcat依赖项在端口8080上自动配置:
<>
SpringBoot提供自动配置的其他Web服务器是Jetty和Undertow。
8.迁移SpringSecurity应用程序
启用SpringSecurity的启动器是spring-boot-starter-security:
<>
默认情况下,这将创建一个名为“user”的用户,在启动期间记录随机生成的密码,并使用基本身份验证保护所有节点。但是,通常希望添加与默认配置不同的安全配置。
出于这个原因,将使用@EnableWebSecurity注解现有的类,它扩展了WebSecurityConfigurerAdapter并定义了一个自定义配置:
@Configuration@EnableWebSecuritypublicclassSecurityConfigextendsWebSecurityConfigurerAdapter{//...}
9.迁移Spring数据应用程序
根据使用的SpringData实现,需要添加相应的启动器。例如,对于JPA,可以添加spring-boot-starter-data-jpa依赖项:
<>
如果要使用内存数据库,请为H2,Derby和HSQLDB类型的数据库添加相应的依赖关系启用自动配置。
例如,要使用H2内存数据库,所需要的只是h2依赖:
<>
如果想使用不同的数据库类型和配置,例如MySQL数据库,那么需要依赖关系以及定义配置。
为此,可以保留DataSourcebean定义或使用预定义的属性:
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driverspring.datasource.url=jdbc:mysql://localhost:3306/testcreateDatabaseIfNotExist=truespring.datasource.username=rootspring.datasource.password=test
SpringBoot会自动将Hibernate配置为默认的JPA提供程序,以及transactionManager。