写在前面
本节将详细介绍如何使用Spring Boot。它涵盖了诸如项目管理及自动构建工具、自动配置以及如何运行应用程序等主题。我们还介绍了一些Spring Boot最佳实践。Spring Boot没有什么特别之处(它只是另一个我们可以使用的库),但是有一些约定俗成的建议(“习惯优于配置"),如果遵循这些建议,将使我们的开发过程变得更容易一些。
项目管理及自动构建工具
强烈建议您选择一个支持依赖项管理的构建系统,我们可以使用该系统得到发布到Maven中心仓库的组件。这里建议选择Maven或Gradle。虽然Spring Boot可以与其他构建系统(例如Ant)一起工作,但是它们并没有得到很好的支持。
1. 依赖关系管理
Spring Boot的每一个版本都提供了它所支持的一个被整理的依赖项列表。实际上,我们不需要为构建配置中的任何依赖项提供版本,因为Spring Boot会为我们管理这些依赖项,当我们升级Spring Boot的时候,这些依赖项也会以一致的方式升级。
当然如果需要,我们仍然可以指定一个版本并覆盖Spring Boot的默认项。
Spring引导的每个版本都与Spring框架的一个基本版本相关联。我们强烈建议您不要指定它的版本。
2. Maven
Maven用户可以从spring-boot-starter-parent项目继承来获得合理的默认值。parent项目提供以下特性:
- Java 1.8作为默认的编译器级别。
- UTF - 8编码。
- 一个继承自spring-boot-dependencies pom的依赖管理部分,管理通用依赖项的版本。这个依赖项管理可以在自己的pom中使用这些依赖项时省略< version>标记。
- 合理的插件配置(exec插件,Git commit ID和shade)。
- 合理的资源过滤(例如:application.properties和application.yml)。包含特定于概要文件的文件(例如:application-dev.properties和application-dev.yml)
2.1 继承 Parent POM
如果需要将项目配置为从spring-boot-starter-parent继承,请将 parent 设置为:
<!-- Inherit defaults from Spring Boot -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.2.RELEASE</version>
</parent>
我们应该仅在此依赖项上指定Spring Boot版本号。如果我们导入其他starter,我们可以放心地省略版本号。
通过这种设置,我们还可以通过在自己的项目中覆盖属性来覆盖各个依赖项。例如,要升级到另一个Spring-Data release系列,我们可以在我们的pom.xml中添加以下内容:
<properties>
<spring-data-releasetrain.version>Fowler-SR2</spring-data-releasetrain.version>
</properties>
2.2 不继承Parent POM
不是每个人都喜欢从spring-boot-starter那里继承。我们可能需要使用您自己的企业标准parent,或者我们可能希望显式声明所有的Maven配置。
如果我们不想使用spring-boot-starter-parent,我们仍然可以通过使用scope=import dependency来保持依赖关系管理(而不是插件管理)的好处,如下所示:
<dependencyManagement>
<dependencies>
<dependency>
<!-- Import dependency management from Spring Boot -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.0.2.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
前面的示例设置不允许我们通过使用属性来覆盖各个依赖项,如上所述。要实现相同的结果,我们需要在spring-boot-dependencies条目之前在我们的项目的依赖项管理中添加一个条目。例如,要升级到另一个Spring Data release,我们可以在我们的pom.xml中添加以下元素:
<dependencyManagement>
<dependencies>
<!-- Override Spring Data release train provided by Spring Boot -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-releasetrain</artifactId>
<version>Fowler-SR2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.0.2.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
在前面的示例中,我们指定了一个BOM,但是任何依赖类型都可以以相同的方式重写。
3. 使用Spring Boot Maven Plugin
Spring Boot包含一个Maven插件,可以将项目打包为可执行jar。如果我们想使用这个插件,请将这个插件添加到< plugins>部分,如下例所示:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
3. Gradle
springboot与gradle的结合篇幅较长,将放在后面单独来讲,敬请期待~
4. Starters
starters是一组依赖描述符,我们可以在应用程序中包括这些描述符。我们可以为所有Spring和相关技术提供一站式服务,而无需通过示例代码和复制粘贴的依赖描述符来进行搜索。例如,如果我们希望开始使用Spring和JPA进行数据库访问,在项目中包含Spring -boot-starter-data- JPA依赖项就好。
starters包含许多依赖项,我们需要这些依赖项来快速启动和运行项目,并且具有一组一致的、受支持的托管传递依赖项。
代码构建
Spring Boot不需要任何特定的代码布局来工作。然而,有一些最佳实践对于我们来说显然是很有帮助的。
1. 使用默认包
当一个类不包含包声明时,它被认为是在“默认包”中。一般不建议使用“默认包”,应该避免使用。它会给使用@ComponentScan、@EntityScan或@SpringBootApplication注解的Spring引导应用程序带来特别的问题,因为每个jar的每个类都被读取。
我们建议您遵循Java推荐的包命名约定,并使用一个反向的域名(例如,com.example.project)。
2. 定位 main application class
我们通常建议您将main class置于其他类之上的root packge中。@SpringBootApplication注释通常放在主类上,它隐式地为某些项定义了基本的“搜索包”。例如,如果我们正在编写一个JPA应用程序,则使用@ SpringBootApplication带注释的类的包来搜索@Entity项。使用根包还允许组件扫描只应用于项目。
如果我们不想使用@SpringBootApplication,那么它导入的@EnableAutoConfiguration和@ComponentScan注释定义了这种行为,因此我们也可以使用它。
下面的清单展示了一个典型的布局:
com
+- example
+- myapplication
+- Application.java
|
+- customer
| +- Customer.java
| +- CustomerController.java
| +- CustomerService.java
| +- CustomerRepository.java
|
+- order
+- Order.java
+- OrderController.java
+- OrderService.java
+- OrderRepository.java
Application.java文件将声明主方法和基本的@SpringBootApplication,如下所示:
package com.example.myapplication;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
配置类
Spring Boot支持基于java的配置。虽然可以将SpringApplication与XML源一起使用,但是我们通常建议您的配置源是一个@Configuration类。通常,定义主方法的类作为主要的@Configuration是一个很好的选择。
许多Spring配置示例已经在Internet上发布,它们使用XML配置。如果可能的话,始终尝试使用等效的基于java的配置。搜索Enable*注释可能是一个很好的起点。
1. 导入额外的配置类
不需要将所有的@Configuration放在一个类中。可以使用@Import注释来导入其他配置类,或者我们可以使用@ComponentScan自动提取所有Spring组件,包括@Configuration类。
2. 导入XML配置
如果必须使用基于XML的配置,建议从一个@Configuration类开始。然后可以使用@ImportResource注释来加载XML配置文件。
下节预告:
- Auto-configuration
- Spring bean和依赖项注入
- 使用@SpringBootApplication注释
......
敬请期待 ~
网友评论