文章使用版本为 Spring Boot 2.1.x
pom 文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.schhx.springbootlearn</groupId>
<artifactId>spring-boot-helloworld</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>spring-boot-helloworld</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
上面就是自动生成的 pom.xml 文件,它是一个非常典型的 Spring Boot 项目的 pom 文件,包含如下几个部分:
- 当前项目的 maven 配置
- 指定 parent pom 为
spring-boot-starter-parent
,这个非常重要,它帮我们管理所有依赖的版本。 - 若干个
spring-boot-starter-xxx
,这个也非常重要,它帮助我们引入所需要功能的所有依赖,并实现自动配置。 - 打包插件
spring-boot-maven-plugin
,它会把我们的 web 项目打包成一个可执行 jar 包,而不是一个 war 包。
使用 Spring Boot 的好处
使用 Spring Boot 能大大简化我们开发的难度,这主要依赖于以下几个方面:
- 约定大于配置:Spring 本身很多地方就体现了约定大于配置,而 Spring Boot 更是把它发挥到了极致。使用约定大于配置一方面能简化我们的配置,另外一方面也能统一大家的认识,降低沟通成本。
-
自动配置:通常我们需要实现什么功能,只要引入对应的
spring-boot-starter-xxx
就可以了,Spring Boot 会帮我们引入所有需要的 jar 包,并且自动配置好所需配置。比如我们想构建一个 web 应用,只需要引入spring-boot-starter-web
,剩下的完全可以交给 Spring Boot 自动配置。如果使用传统的 Spring MVC 的话,我们要手动引入一堆 jar 包,维护版本和依赖关系,手动配置一堆Spring MVC 相关的配置,才能把项目搭建好。 -
自动维护依赖:引入项目所需 jar 包是一个非常繁琐的工作,除了要引入所有所需 jar 包,还要小心维护版本防止出现冲突。使用 Spring Boot 我们完全不需要关心版本以及依赖,这些 Spring Boot 会统统帮我们做好,我们只需要告诉 Spring Boot 使用哪个
spring-boot-starter-xxx
就可以了。
使用自定义 parent pom
上面我们说到 Spring Boot 项目的 parent pom 需要指定为 spring-boot-starter-parent
,但是有些情况下我们必须使用其他的 parent pom 怎么办呢?比如公司有统一的 parent pom,这个时候怎么办呢?
方法一
第一种解决办法是在公司统一的 parent pom 中引入 Spring Boot,这是一个比较好的方法,这样可以使大家使用 Spring Boot 的版本一致,有利于整个公司的管理。
方法二
如果无法通过 parent pom 引入 Spring Boot,那么我们只要在 pom 文件中加入以下配置就可以了。
<dependencyManagement>
<dependencies>
<dependency>
<!-- Import dependency management from Spring Boot -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.1.6.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
打包成 war
使用 Spring Boot 构建 web 项目时,默认会打包成 jar 包,这是推荐的使用方式,但是如果需要打包成 war 包,也是可以的,但是还是推荐大家打包成 jar 包。
第一步
让项目启动类继承 SpringBootServletInitializer
并重写 configure
方法。
@SpringBootApplication
public class SpringBootHelloworldApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(SpringBootHelloworldApplication.class);
}
public static void main(String[] args) {
SpringApplication.run(SpringBootHelloworldApplication.class, args);
}
}
第二步
在 pom 文件中加入以下配置:
<packaging>war</packaging>
第三步
去除 web 容器的依赖:
<dependencies>
<!-- … -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<!-- … -->
</dependencies>
大家可以查看 官方文档 获取更详细的信息。
使用 Jetty
Spring Boot 默认使用 Tomcat 作为内置 web 容器,如果需要使用其他的 web 容器则可以做如下配置(以更换为 Jetty)为例:
<properties>
<servlet-api.version>3.1.0</servlet-api.version>
</properties>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<!-- Exclude the Tomcat dependency -->
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- Use Jetty instead -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
这里还替换了 servlet-api 的版本,是因为 Jetty 9.4 不支持 Servlet 4.0,更多信息请查看 官方文档。
网友评论