美文网首页
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