美文网首页
Spring Boot 进阶系列(一)Hello World 项

Spring Boot 进阶系列(一)Hello World 项

作者: 回文体文回 | 来源:发表于2019-07-20 15:23 被阅读0次

文章使用版本为 Spring Boot 2.1.x

对应入门系列 Spring Boot 入门系列(一) Hello World

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,更多信息请查看 官方文档

相关文章

网友评论

      本文标题:Spring Boot 进阶系列(一)Hello World 项

      本文链接:https://www.haomeiwen.com/subject/xxwylctx.html