从Spring迁移到Spring Boot

 

1.概

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

Spring Boot不是要取代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管理。如果没有,我们可能会遇到我们定义的版本与Boot使用的版本之间的不兼容性。

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批注会扫描同一个包或更低版本中的所有类。因此,方便的包结构可能如下所示:

从Spring迁移到Spring Boot_第1张图片

如果您的应用程序是创建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会在以下位置之一中查找资源文件:

  • /资源
  • /上市
  • /静态的
  • / META-INF /资源

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

1

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

6.迁移应用程序属性

该框架将自动加载在其中一个位置放置的名为application.propertiesapplication.yml的文件中定义的任何属性:

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

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

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

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

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

7.迁移Spring Web应用程序

7.1。网站入门

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



    org.springframework.boot

    spring-boot-starter-web

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

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

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

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

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

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

7.2。查看技术

就构建网页而言,官方文档建议不要使用JSP文件并使用模板引擎。以下模板引擎包含自动配置:ThymeleafGroovyFreeMarkerMustache。我们需要做的就是使用其中一个添加特定的启动器:



    org.springframework.boot

    spring-boot-starter-thymeleaf

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

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

1

2

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

spring.mvc.view.suffix=.jsp

7.3。嵌入式Web服务器

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



    org.springframework.boot

    spring-boot-starter-tomcat

Spring Boot提供自动配置的其他Web服务器是JettyUndertow

8.迁移Spring Security应用程序

启用S​​pring 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

如果我们想要使用内存数据库,请为H2DerbyHSQLDB类型的数据库添加相应的依赖关系启用自动配置。

例如,要使用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/myDb?createDatabaseIfNotExist=true

spring.datasource.username=user

spring.datasource.password=pass

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

10.结论

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

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

本文翻译自:https://www.baeldung.com/spring-boot-migration

你可能感兴趣的:(SpringBoot)