知识铺: 致力于打造轻知识点,持续更新每次的知识点较少,阅读不累。不占太多时间,不停地来唤醒你记忆深处的知识点。





1.概述

在本文中,将了解如何将现有的Spring Framework应用程序迁移到Spring Boot应用程序。

Spring Boot不是为了取代Spring,而是为了更快更容易地使用Spring。因此,迁移应用程序所需的大多数更改都与配置有关。

使用Spring Boot进行开发带来了几个优点:

  • 更简单的依赖管理
  • 默认自动装配
  • 嵌入式Web服务器独立运行
  • 应用程序指标和健康检查
  • 高级外部化配置

2. Spring Boot Starters 极速开始项

首先,需要一组新的依赖项。Spring Boot提供了极速开始依赖项,这些依赖项可以为某些功能引入所有必需的技术。

这些优点是不再需要为每个依赖项指定版本,而是让极速开始项预置了依赖。

最快的入门方法是添加spring-boot-starter-parent 到pom.xml:

org.springframework.boot
 spring-boot-starter-parent
 1.5.6.RELEASE

spring-boot-starter-parent负责依赖管理。

3.启动入口

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

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

该@SpringBootApplication注解包含以下注解:

  • @Configuration - 将类标记为bean定义的来源
  • @EnableAutoConfiguration - 告诉框架自动根据类路径的依赖关系添加bean
  • @ComponentScan - 扫描与Application类或更低版本相同的包中的其他配置和bean

默认情况下,@ SpringBootApplication注解会自动扫描同一个包或下级本中的所有类。因此,方便的包结构可能如下所示:

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

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

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

4.导入配置和组件

Spring Boot在很大程度上依赖于配置注解,但仍然可以以注解和XML格式导入现有配置。

要获取现有的@Configuration或组件类,有两种选择:

将现有类移动到与主Application类包相同或下级的包

显示导入类

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

@SpringBootApplication
@ComponentScan(basePackages="com.baeldung.config")
@Import(UserRepository.class)
public class Application {
 //...
}
官方文档建议在XML配置上使用注解。但是,如果已经有XML文件,不希望转换为Java配置,仍然可以使用@ImportResource导入它们:
@SpringBootApplication
@ImportResource("applicationContext.xml")
public class Application {
 //...
}

5.迁移应用程序资源

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

/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.迁移Spring Web应用程序

7.1 web相关的: spring-boot-starter-web

Spring Boot为Web应用程序提供了一个启动器,它将引入所有必需的依赖项。这意味着可以从Spring框架中删除所有特定于Web的依赖项,并将其替换为spring-boot-starter-web:

org.springframework.boot
 spring-boot-starter-web

由于Spring Boot尝试根据类路径尽可能自动配置应用程序,因此添加此依赖项将导致将@EnableWebMvc注解添加到主Application类,以及设置DispatcherServlet。

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

如果有一个自定义行为,可以定义的bean,在这种情况下,将使用的bean。

如果在@Configuration类上显式使用@EnableWebMvc注解,则将不再启用MVC自动配置。

添加Web启动程序还会确定以下Bean的自动配置:

支持从类路径上名为/static,/public,/resources或/META-INF/resources的目录提供静态内容

HttpMessageConverter用于常见用例,如JSON和XML

处理所有错误的/error 映射

7.2。渲染相关的:spring-boot-starter-xxx

就渲染网页而言,官方文档建议不要使用JSP文件模板引擎。使用以下模板引擎包含自动配置:Thymeleaf,Groovy,FreeMarker,Mustache。需要做的就是使用其中一个添加特定的starter:

org.springframework.boot
 spring-boot-starter-thymeleaf

模板文件应放在/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上自动配置:

org.springframework.boot
 spring-boot-starter-tomcat

Spring Boot提供自动配置的其他Web服务器是Jetty和Undertow。

8.迁移Spring Security应用程序

启用Spring Security 的启动器是spring-boot-starter-security:

org.springframework.boot
 spring-boot-starter-security

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

出于这个原因,将使用@EnableWebSecurity注解现有的类,它扩展了WebSecurityConfigurerAdapter并定义了一个自定义配置:

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

9.迁移Spring数据应用程序

根据使用的Spring Data实现,需要添加相应的启动器。例如,对于JPA,可以添加spring-boot-starter-data-jpa依赖项:

org.springframework.boot
 spring-boot-starter-data-jpa

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

例如,要使用H2内存数据库,所需要的只是h2依赖:

com.h2database
 h2

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

为此,可以保留DataSource bean定义或使用预定义的属性:

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

Spring Boot会自动将Hibernate配置为默认的JPA提供程序,以及transactionManager。