本节将详细介绍如何使用 Spring Boot。它涵盖了构建系统、自动配置以及如何运行应用等主题。我们还介绍了一些 Spring Boot 的最佳实践。虽然 Spring Boot 没有什么特别的东西(它只是另一个你可以使用的库),但接下来的一些建议可以让你的开发过程更简单一点。 如果你刚开始使用 Spring Boot,那么在进入本节之前应该先阅读 新手入门 部分。 强烈建议你选择一个支持 依赖管理 并能使用 “Maven Central” 仓库中发布的构件的构建系统。我们建议你选择 Maven 或 Gradle。Spring Boot 也可以与其它构建系统(例如 Ant)协同工作,但它们不会得到很好的支持。 Spring Boot 每一个发布版本都会提供它支持的依赖列表。实际应用时,在你的构建配置中不需要提供这些依赖的版本,因为 Spring Boot 会帮你进行管理。当你升级 Spring Boot 时,这些依赖也会随之进行升级。
精选列表包含了所有你在 Spring Boot 中可以使用的 Spring 模块以及精选的第三方库列表。这个列表可以作为一个标准的 材料清单 (
Maven 用户可以继承
需要注意的是,由于
若要将项目配置为继承 <!-- Inherit defaults from Spring Boot --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.0.BUILD-SNAPSHOT</version> </parent>
使用这个设置,你也可以通过在自己项目中重写一个属性来覆盖单个依赖项。例如,为了升级到 Spring Data 的另一个发行版本,你将需要在你的 <properties> <spring-data-releasetrain.version>Fowler-SR2</spring-data-releasetrain.version> </properties>
不是每个人都喜欢继承
如果你不想使用 <dependencyManagement> <dependencies> <dependency> <!-- Import dependency management from Spring Boot --> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.1.0.BUILD-SNAPSHOT</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
这个设置不允许你使用上面阐述的属性来重写单个依赖项。为了达到同样的效果,你需要在项目的 <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.1.0.BUILD-SNAPSHOT</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
Spring Boot 包含了一个 Maven 插件,这个插件可以将项目打包为一个可执行的 jar 包。如果你想使用它的话,将它添加到你的 <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
使用 Apache Ant+Ivy 来创建一个 Spring Boot 项目是可能的。
为了声明依赖,一个典型的 <ivy-module version="2.0"> <info organisation="org.springframework.boot" module="spring-boot-sample-ant" /> <configurations> <conf name="compile" description="everything needed to compile this module" /> <conf name="runtime" extends="compile" description="everything needed to run this module" /> </configurations> <dependencies> <dependency org="org.springframework.boot" name="spring-boot-starter" rev="${spring-boot.version}" conf="compile" /> </dependencies> </ivy-module> 一个典型的 <project xmlns:ivy="antlib:org.apache.ivy.ant" xmlns:spring-boot="antlib:org.springframework.boot.ant" name="myapp" default="build"> <property name="spring-boot.version" value="2.1.0.BUILD-SNAPSHOT" /> <target name="resolve" description="--> retrieve dependencies with ivy"> <ivy:retrieve pattern="lib/[conf]/[artifact]-[type]-[revision].[ext]" /> </target> <target name="classpaths" depends="resolve"> <path id="compile.classpath"> <fileset dir="lib/compile" includes="*.jar" /> </path> </target> <target name="init" depends="classpaths"> <mkdir dir="build/classes" /> </target> <target name="compile" depends="init" description="compile"> <javac srcdir="src/main/java" destdir="build/classes" classpathref="compile.classpath" /> </target> <target name="build" depends="compile"> <spring-boot:exejar destfile="build/myapp.jar" classes="build/classes"> <spring-boot:lib> <fileset dir="lib/runtime" /> </spring-boot:lib> </spring-boot:exejar> </target> </project>
启动器是一系列你可以包含进自己应用中的实用依赖描述符。你可以得到所有 Spring 和你需要的相关技术的一站式服务,而无需查找示例代码和复制粘贴的依赖描述符。例如,如果你想开始使用 Spring 和 JPA 来进行数据库链接,只需要在你的工程中包含 启动器包含许多你需要启动并快速运行一个工程的依赖,并持续支持一系列管理传递的依赖。
下面的应用启动器由 Spring Boot 提供,在 表格 13.1. Spring Boot 应用的启动器
除了应用启动器之外,下面的启动器可以用来添加 生产就绪 特性: 最后,如果你想排除或切换特定技术方面,Spring Boot 也包括一些可以使用的启动器: 表格 13.3. Spring Boot 技术启动器
Spring Boot 工作时不要求任何特定的代码布局。但是,有一些最佳实践是很有帮助的。
当一个类不包含
我们一般建议你将应用主类放在其它类之上的根包中。
下面是一个典型的布局: com +- example +- myapplication +- Application.java | +- customer | +- Customer.java | +- CustomerController.java | +- CustomerService.java | +- CustomerRepository.java | +- order +- Order.java +- OrderController.java +- OrderService.java +- OrderRepository.java
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); } } |