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