SpringBoot2.x入門:快速創建一個SpringBoot應用


前提

這篇文章是《SpringBoot2.x入門》專輯的第2篇文章,使用的SpringBoot版本為2.3.1.RELEASEJDK版本為1.8

常規的套路會建議使用Spring官方提供的工具Spring Initializr通過指定配置創建一個SpringBoot項目,但是考慮到Spring Initializr必須聯網使用,對於項目配置和依賴的控制粒度不夠精細,本文會從更一般的情況考慮,詳細分析怎么通過MavenIntelliJ IDEA(下稱IDEA)快速創建一個SpringBoot應用,包括單模塊的Maven和多模塊的Maven應用創建。

依賴分析

必要的插件:

  • Maven編譯插件:maven-compiler-plugin
  • SpringBoot封裝的Maven插件(一般必選,項目最終打包依賴到這個插件,它的版本建議跟隨選用的SpringBoot的版本):spring-boot-maven-plugin

Maven編譯插件盡可能選用高版本,以適配更高版本的JDK。一般會選用的基本依賴如下:

  • lombok(可選,個人認為能提高開發效率,不過需要安裝對應的插件)。
  • junitspring-boot-starter-test):單元測試。
  • spring-boot-starterBean管理、配置讀取等,簡單理解就是IOC容器核心組件和一些擴展。
  • spring-boot-starter-web:基於spring-boot-starter擴展,主要集成了SpringMVC的功能。

多數情況下,選用spring-boot-starter-web即可,版本選取REALEASE版本即可,注意盡可能整套項目使用同一個大版本的SpringBoot。

下面例子用到的各個組件的版本如下:

序號 組件 版本號 描述
1 maven-compiler-plugin 3.8.1 Maven編譯插件
2 spring-boot-starter 2.3.1.RELEASE IOC容器核心組件
3 spring-boot-maven-plugin 2.3.1.RELEASE SpringBoot封裝的Maven插件
4 lombok 1.18.12 -

創建一個單模塊的SpringBoot應用

點擊IDEA主菜單File -> Project進入創建新項目的界面:

選擇左側的Maven選項,上方下拉選擇好JDK版本,勾選Create from archetype,然后選中maven-archetype-webapp這個骨架的RELEASE版本,然后點擊下一步按鈕:

輸入項目的GAV,選定項目的磁盤目錄,然后點擊下一步按鈕:

選定Maven的安裝路徑、配置文件和本地倉庫,配置好相應的屬性,最后點擊完成即可:

創建出來的是一個標准的Maven項目,它的結構如下:

spring-boot-guide
   - src
     - main
       - webapp
         - web.xml
   - pom.xml

一般可以直接刪除src/main/webapp目錄,在pom.xml中增加對應的依賴,最終的pom.xml如下:

<?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>club.throwable</groupId>
    <artifactId>spring-boot-guide</artifactId>
    <version>1.0-SNAPSHOT</version>
    <!-- 指定打包方式為Jar -->
    <packaging>jar</packaging>
    <name>spring-boot-guide</name>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <maven.compiler.plugin.version>3.8.1</maven.compiler.plugin.version>
        <lombok.version>1.18.12</lombok.version>
        <spring.boot.version>2.3.1.RELEASE</spring.boot.version>
    </properties>
    <!-- BOM全局管理starter版本 -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring.boot.version}</version>
                <scope>import</scope>
                <type>pom</type>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>${lombok.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <build>
        <!-- 指定最終打出來的Jar包的名稱 -->
        <finalName>spring-boot-guide</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>${maven.compiler.plugin.version}</version>
                <configuration>
                    <source>${maven.compiler.source}</source>
                    <target>${maven.compiler.target</target>
                    <encoding>${project.build.sourceEncoding}</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${spring.boot.version}</version>
<!--                <configuration>-->
<!--                    <mainClass>可選配置,這里填寫啟動類的全類名</mainClass>-->
<!--                </configuration>-->
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

有依賴版本變動,只需要直接修改properties元素中對應的版本號即可。在src/main下新建啟動類java/club/throwable/App.java

import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@Slf4j
@SpringBootApplication
public class App implements CommandLineRunner {

    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }

    @Override
    public void run(String... args) throws Exception {
        log.info("Hello SpringBoot!");
    }
}

啟動App中的main函數后輸出如下:

spring-boot-starter模塊引入的只是核心容器組件,並沒有集成像Tomcat這樣的Servlet容器,啟動后不會掛起主線程,所以執行完CommandLineRunner中的邏輯就會自行退出主線程。

創建一個多模塊的SpringBoot應用

多模塊應用的創建基於單模塊應用,准確來說就是在一個創建完的單模塊應用中添加新的模塊(New Module)。在原來的根項目spring-boot-guide右鍵彈出菜單中選擇新建模塊:

后續的步驟與上一小節的過程完全相同,不過定義的模塊名稱必須和根項目的名稱不相同,這里定義為ch0-dependency,然后調整父pom.xml和子pom.xml

  • spring-boot-guide -> pom.xml
<?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>club.throwable</groupId>
    <artifactId>spring-boot-guide</artifactId>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>ch0-dependency</module>
    </modules>
    <packaging>pom</packaging>
    <name>spring-boot-guide</name>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <maven.compiler.plugin.version>3.8.1</maven.compiler.plugin.version>
        <lombok.version>1.18.12</lombok.version>
        <spring.boot.version>2.3.1.RELEASE</spring.boot.version>
    </properties>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring.boot.version}</version>
                <scope>import</scope>
                <type>pom</type>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>${lombok.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <build>
        <finalName>spring-boot-guide</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>${maven.compiler.plugin.version}</version>
                <configuration>
                    <source>${maven.compiler.source}</source>
                    <target>${maven.compiler.target</target>
                    <encoding>${project.build.sourceEncoding}</encoding>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
  • spring-boot-guide/ch0-dependency -> pom.xml
<?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>
    <parent>
        <groupId>club.throwable</groupId>
        <artifactId>spring-boot-guide</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <artifactId>ch0-dependency</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>
    <name>ch0-dependency</name>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
    </dependencies>
    <build>
        <finalName>ch0-dependency</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${spring.boot.version}</version>
<!--                <configuration>-->
<!--                    <mainClass>club.throwable.App</mainClass>-->
<!--                </configuration>-->                           
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

注意:

  • spring-boot-maven-plugin一般情況下只需配置在需要打包的模塊中,一般父模塊是全局管理的模塊,不需要全局定義此插件。
  • maven-compiler-plugin可以配置在父模塊中,讓所有子模塊都應用此插件。
  • spring-boot-starter-testlombok可以在父模塊的dependencies元素中添加,相當於所有子模塊都引入了這兩個依賴。

父模塊中的spring-boot-guidesrc模塊需要丟棄,可以直接剪切到ch0-dependency子模塊中,如下:

后面再添加其他新的模塊,直接重復上述的步驟即可。

代碼倉庫

這里給出本文搭建的一個多模塊的SpringBoot應用的倉庫地址(持續更新):

(本文完 c-2-d e-a-20200701 8:39 AM)

技術公眾號(《Throwable文摘》,id:throwable-doge),不定期推送筆者原創技術文章(絕不抄襲或者轉載):


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM