Spring Boot (1.3.6.RELEASE) 入門

本文翻譯自Spring Boot官方文檔的Getting Started部分,原文可點(diǎn)擊此處查看。

如果你剛開(kāi)始學(xué)習(xí)使用Spring Boot,或者Spring框架,那么這篇文章正是為你準(zhǔn)備的!通過(guò)這篇文章,我們將介紹關(guān)于Spring Boot的一些基本知識(shí)。你將從接下來(lái)的章節(jié)中了解到Spring Boot的安裝命令,我們將一起構(gòu)建我們的第一個(gè)Spring Boot應(yīng)用,然后我們將一起討論一些核心原則。

Spring Boot簡(jiǎn)介

Spring Boot可以幫助我們輕易創(chuàng)建出可獨(dú)立運(yùn)行的,基于Spring的生產(chǎn)級(jí)應(yīng)用,這些應(yīng)用甚至可以直接運(yùn)行而不依賴其他環(huán)境(僅需要JVM)。我們用統(tǒng)一的方式來(lái)看待Spring平臺(tái)以及第三方庫(kù),因此你在使用的過(guò)程中不會(huì)有太多混亂的情況出現(xiàn),并且大部分Spring Boot應(yīng)用幾乎不需要處理煩人的Spring配置。
使用Spring Boot你可以創(chuàng)建一個(gè)可直接用java -jar命令運(yùn)行的包,當(dāng)然也可以創(chuàng)建傳統(tǒng)的war包,我們還提供了一個(gè)命令行工具用來(lái)運(yùn)行“spring腳本”。

我們的主要目的是:

  • 提供一個(gè)急速的并且隨手可得的Spring項(xiàng)目開(kāi)發(fā)體驗(yàn)。
  • 提供穩(wěn)定的開(kāi)箱即得的開(kāi)發(fā)方式,同時(shí)又能迅速的在默認(rèn)配置的基礎(chǔ)上做出按需的配置。
  • 提供大量的公共的非功能性特性(例如:嵌入式服務(wù)器,權(quán)限管理,性能監(jiān)控,健康檢查,外部配置等)。
  • 絕對(duì)不需要代碼生成并且不需要XML配置文件。

系統(tǒng)要求

默認(rèn)情況下Spring Boot 1.3.6.RELEASE要求Java 7和Spring Framework 4.2.7.RELEASE或更高版本。你也可以使用Java 6,但是需要一些額外的配置。我們?yōu)镸aven (3.2+)和Gradle (1.12+)提供了構(gòu)建支持。

雖然你可以在Java 6或Java 7環(huán)境下使用Spring Boot,但我們通常建議如果有可能盡量使用Java 8。

Servlet容器

默認(rèn)包含下列嵌入式服務(wù)器:

Name Servlet Version Java Version
Tomcat 8 3.1 Java 7+
Tomcat 7 3.0 Java 6+
Jetty 9 3.1 Java 7+
Jetty 8 3.0 Java 6+
Undertow 1.1 3.1 Java 7+

你可以將Spring Boot應(yīng)用部署到任何的Servlet 3.0+兼容的容器中。

安裝Spring Boot

Spring Boot可以使用“傳統(tǒng)”的Java開(kāi)發(fā)工具或者作為一個(gè)命令行工具安裝。但無(wú)論如何,你需要Java SDK v1.6以上的開(kāi)發(fā)環(huán)境。 你可以用以下命名來(lái)查看你的Java版本:

$ java -version

如果你是一個(gè)Java開(kāi)發(fā)的新手或者你只是想體驗(yàn)一下Spring Boot,你可能首先想試試Spring Boot CLI,你也可以繼續(xù)閱讀下面的內(nèi)容來(lái)了解“傳統(tǒng)”方式的使用。

雖然Spring Boot兼容Java 1.6,但如果可能的話,請(qǐng)盡量使用最新版本的Java環(huán)境。

安裝指令

你可以像任何標(biāo)準(zhǔn)的Java庫(kù)一樣的方式使用Spring Boot,只需要簡(jiǎn)單的將相關(guān)的spring-boot-*.jar文件引入到你的classpath中。Spring Boot不要求任何特殊的工具集成,所以你可以使用任何IDE或者文本編輯器,Spring Boot應(yīng)用沒(méi)有任何特殊的地方,所以你可以像其他Java程序一樣運(yùn)行和調(diào)試。
雖然你* 可以 *簡(jiǎn)單的把Spring Boot的jar文件復(fù)制到你的項(xiàng)目中,但通常的做法是使用一些支持依賴管理的構(gòu)建工具(例如Maven或者Gradle)。

Maven安裝

Spring Boot兼容Apache Maven 3.2或更高版本。如果你沒(méi)有安裝Maven,你可以按照maven.apache.org中的方法安裝。

在很多操作系統(tǒng)上都可以通過(guò)相應(yīng)的包管理器來(lái)安裝Maven。如果你是OSX Homebrew的用戶,你可以通過(guò)命令brew install maven來(lái)安裝,而Ubuntu用戶可以運(yùn)行sudo apt-get install maven來(lái)安裝。

Spring Boot的依賴使用org.springframework.boot作為groupId,通常你的Maven POM文件需要繼承自spring-boot-starter-parent項(xiàng)目,然后聲明一個(gè)或多個(gè)“Starter POMs”依賴。Spring Boot還提供了一個(gè)可選的Maven plugin用來(lái)創(chuàng)建可執(zhí)行的jar包。

一個(gè)常規(guī)的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>com.example</groupId>
    <artifactId>myproject</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <!-- 繼承Spring Boot默認(rèn)配置 -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.3.6.RELEASE</version>
    </parent>

    <!-- 添加一個(gè)典型的web項(xiàng)目配置 -->
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

    <!-- 可執(zhí)行jar包打包插件 -->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

使用spring-boot-starter-parent是一個(gè)使用Spring Boot非常好的方式,但并不總是所有情況下都是最適合的方式,有時(shí)你可能需要你的項(xiàng)目繼承自其它的父項(xiàng)目POM,或者你只是單純的不喜歡我們的POM設(shè)置,我們下面有專門的一個(gè)章節(jié)來(lái)介紹不依賴我們的父項(xiàng)目POM如何使用Spring Boot。

Gradle安裝

Spring Boot兼容Gradle 1.12或更高版本。如果你還沒(méi)有安裝Gradle,你可以按照www.gradle.org/中的方法安裝。
Spring Boot依賴使用org.springframework.boot作為group。
通常你的項(xiàng)目需要聲明一個(gè)或多個(gè)“Starter POMs”依賴。Spring Boot提供了一個(gè)Gradle plugin來(lái)幫助你創(chuàng)建可執(zhí)行的jar包。

Gradle Wrapper

Gradle Wrapper提供了一個(gè)很優(yōu)雅的方式將Gradle“包含”到你需要編譯的項(xiàng)目中,它是一個(gè)可以和代碼一起提交的小型的腳本和庫(kù),幫助你啟動(dòng)一個(gè)編譯進(jìn)程。詳情參看這里。

一個(gè)常規(guī)的build.gradle文件如下:

buildscript { 
    repositories { 
        jcenter() 
        maven { url "http://repo.spring.io/snapshot" } 
        maven { url "http://repo.spring.io/milestone" } 
    } 
    dependencies { 
        classpath("org.springframework.boot:spring-boot-gradle-plugin:1.3.6.RELEASE") 
    }
}

apply plugin: 'java'
apply plugin: 'spring-boot'

jar { 
    baseName = 'myproject' version = '0.0.1-SNAPSHOT'
}

repositories { 
    jcenter() 
    maven { url "http://repo.spring.io/snapshot" } 
    maven { url "http://repo.spring.io/milestone" }
}

dependencies { 
    compile("org.springframework.boot:spring-boot-starter-web")
    testCompile("org.springframework.boot:spring-boot-starter-test")
}

安裝Spring Boot CLI

Spring Boot CLI是一個(gè)命令行工具,可以幫助你快速建立Spring項(xiàng)目原型。它允許你運(yùn)行Groovy腳本,與Java語(yǔ)法類似但不需要太多的腳手架式的語(yǔ)法。

你并不需要在你的Spring Boot項(xiàng)目中使用CLI工具,但它絕對(duì)是落地一個(gè)Spring應(yīng)用最快的方式。

手動(dòng)安裝

你可以在下面的Spring軟件源地址下載Spring CLI:

你也可以選擇最前沿的snapshot分發(fā)包。

下載完成后的壓縮包中可以找到INSTALL.txt,按照其中的指令進(jìn)行安裝。大體上如下:在.zip文件的bin/目錄下有一個(gè)spring腳本(Windows下是spring.bat),或者你也可以直接通過(guò)java -jar命令運(yùn)行.jar文件(使用上述的腳本可以幫助你確保classpath正確設(shè)置) 。

使用SDKMAN! 安裝

SDKMAN! (The Software Development Kit Manager)可以用來(lái)管理多種SDK的多個(gè)版本,包括Groovy和Spring Boot CLI。從sdkman.io獲取SDKMAN!然后通過(guò)下面的命令來(lái)安裝Spring Boot:

$ sdk install springboot
$ spring --version
Spring Boot v1.3.6.RELEASE

如果你在開(kāi)發(fā)有關(guān)CLI的特性,并且想要方便的獲取你剛剛構(gòu)建的版本,可以使用下面的額外指令:

$ sdk install springboot dev /path/to/spring-boot/spring-boot-cli/target/spring-boot-cli-1.3.6.RELEASE-bin/spring-1.3.6.RELEASE/
$ sdk default springboot dev
$ spring --version
Spring CLI v1.3.6.RELEASE

這將會(huì)安裝一個(gè)名叫dev實(shí)例的spring本地實(shí)例,這個(gè)實(shí)例指向你的目標(biāo)構(gòu)建路徑,這樣你每次重新構(gòu)建Spring Boot,spring命令就會(huì)保持同步更新了。
你可以用下面的命令來(lái)查看:

$ sdk ls springboot
================================================================================
Available Springboot Versions
================================================================================
> + dev* 1.3.6.RELEASE
================================================================================
+ - local version
* - installed
> - currently in use
================================================================================

OSX Homebrew安裝

如果你在使用Mac并且使用Homebrew,安裝Spring Boot CLI需要做的所有事情就是運(yùn)行下面的命令:

$ brew tap pivotal/tap
$ brew install springboot

Homebrew會(huì)將spring安裝到/usr/local/bin

如果你找不到這個(gè)formula,可能你安裝的brew過(guò)期了,運(yùn)行brew update然后重試。

MacPorts installation

如果你使用Mac并且使用MacPorts, 安裝Spring Boot CLI需要做的所有事情就是運(yùn)行下面的命令:

$ sudo port install spring-boot-cli

命令行自動(dòng)補(bǔ)全

Spring Boot CLI有一個(gè)配套的腳本為BASHzsh提供了自動(dòng)補(bǔ)全功能。 你可以在任意的shell中用source來(lái)執(zhí)行這個(gè)腳本(同樣名叫spring),或者將其放在你個(gè)人或者系統(tǒng)級(jí)的bash自動(dòng)補(bǔ)全初始化目錄中。在Debian系統(tǒng)中,系統(tǒng)級(jí)的腳本位于/shell-completion/bash中,當(dāng)啟動(dòng)一個(gè)新的shell時(shí),目錄中的腳本會(huì)全部執(zhí)行。你可以手動(dòng)運(yùn)行這個(gè)腳本,例如你使用SDKMAN!安裝的話,就使用以下的命令:

$ . ~/.sdkman/springboot/current/shell-completion/bash/spring
$ spring <HIT TAB HERE>
  grab help jar run test version

如果你使用Homebrew或MacPorts安裝Spring Boot CLI,命令行自動(dòng)補(bǔ)全腳本會(huì)自動(dòng)注冊(cè)到你的shell中。

快速創(chuàng)建一個(gè)Spring CLI示例

你可以使用這里的一個(gè)非常簡(jiǎn)單的web應(yīng)用來(lái)測(cè)試你的安裝。創(chuàng)建一個(gè)名為app.groovy的文件:

@RestController
class ThisWillActuallyRun { 

    @RequestMapping("/") 
    String home() { 
        "Hello World!" 
    }

}

然后在shell中運(yùn)行:

$ spring run app.groovy

如果你第一次運(yùn)行,會(huì)花費(fèi)一些時(shí)間來(lái)下載依賴,后面再次運(yùn)行的時(shí)候會(huì)快的多。

在你最喜歡的瀏覽器中打開(kāi)localhost:8080然后你應(yīng)該能看到下面的輸出:

Hello World!

從早期的Spring Boot版本升級(jí)

如果你正在從早期的Spring Boot發(fā)行版升級(jí),查看project wiki上的“release notes”。你會(huì)在每個(gè)發(fā)行版本的“new and noteworthy”特性列表旁邊找到升級(jí)的指令。

要升級(jí)已經(jīng)存在的CLI,請(qǐng)使用相應(yīng)的包管理器命令(例如brew upgrade),或者如果你的CLI是手動(dòng)安裝的,參考標(biāo)準(zhǔn)指令,記得更新你的PATH環(huán)境變量,清除老舊的引用地址。

開(kāi)發(fā)你的第一個(gè)Spring Boot應(yīng)用

現(xiàn)在我們來(lái)開(kāi)發(fā)一個(gè)簡(jiǎn)單的“Hello World” Java web應(yīng)用,并且用上一些Spring Boot的關(guān)鍵特性。我們會(huì)使用Maven來(lái)構(gòu)建這個(gè)項(xiàng)目,大部分的IDE都支持Maven。

網(wǎng)址spring.io下包含了很多使用了Spring Boot的“Getting Started”指南,如果你在尋找特定問(wèn)題的解決方案,你可以先去那里看看。你可以從這個(gè)網(wǎng)址start.spring.io進(jìn)入來(lái)簡(jiǎn)化步驟,在依賴搜索中選擇web starter,這將自動(dòng)生成一個(gè)新的項(xiàng)目結(jié)構(gòu),這樣你就可以直接開(kāi)始編碼。 你還可以查看詳細(xì)文檔

在開(kāi)始之前,打開(kāi)一個(gè)終端并驗(yàn)證你的Java和Maven版本:

$ java -version
java version "1.7.0_51"
Java(TM) SE Runtime Environment (build 1.7.0_51-b13)
Java HotSpot(TM) 64-Bit Server VM (build 24.51-b03, mixed mode)
$ mvn -v
Apache Maven 3.2.3 (33f8c3e1027c3ddde99d3cdebad2656a31e8fdf4; 2014-08-11T13:58:10-07:00)
Maven home: /Users/user/tools/apache-maven-3.1.1
Java version: 1.7.0_51, vendor: Oracle Corporation

你需要為這個(gè)示例創(chuàng)建一個(gè)單獨(dú)的目錄,后續(xù)的所有指令都假設(shè)你創(chuàng)建了合適的目錄,并且你的“當(dāng)前目錄”就在你的項(xiàng)目目錄中。

創(chuàng)建POM

我們需要?jiǎng)?chuàng)建一個(gè)Maven pom.xml文件,這個(gè)pom.xml文件將作為你項(xiàng)目的構(gòu)建配置。打開(kāi)你最常用的文本編輯器然后添加如下內(nèi)容:

<?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>com.example</groupId> 
    <artifactId>myproject</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <parent> 
        <groupId>org.springframework.boot</groupId> 
        <artifactId>spring-boot-starter-parent</artifactId> 
        <version>1.3.6.RELEASE</version> 
    </parent> 

    <!-- Additional lines to be added here... -->

</project>

這樣你就有了一個(gè)可以構(gòu)建的項(xiàng)目,你可以運(yùn)行mvn package來(lái)測(cè)試(你現(xiàn)在可以暫時(shí)忽略“jar will be empty - no content was marked for inclusion!”的警告信息)。

這時(shí)候你就可以把項(xiàng)目導(dǎo)入一個(gè)IDE了(大部分現(xiàn)代Java IDE都內(nèi)置了Maven的支持)。但為了簡(jiǎn)單起見(jiàn),我們接下來(lái)還是使用純文本編輯器來(lái)操作這個(gè)示例。

添加classpath依賴

Spring Boot提供了大量的“Starter POMs”,讓你可以很方便的添加需要的jar包到你的classpath。我們的示例程序已經(jīng)在POM的parent中使用了spring-boot-starter-parent,這是一個(gè)特殊的starter,它提供了很多有用的默認(rèn)Maven配置,以及依賴管理的支持,使得你在使用一些依賴的時(shí)候可以省略version版本號(hào)。

其他的“Starter POMs”可以讓我們很方便的使用開(kāi)發(fā)某種特定應(yīng)用時(shí)需要的依賴。如果我們想開(kāi)發(fā)一個(gè)web應(yīng)用,我們就引入一個(gè)spring-boot-starter-web的依賴,在這之前我們先來(lái)看看我們現(xiàn)在已經(jīng)引入的依賴:

$ mvn dependency:tree

[INFO] com.example:myproject:jar:0.0.1-SNAPSHOT

mvn dependency:tree命令可以打印出你的項(xiàng)目的依賴樹(shù),如你所見(jiàn)spring-boot-starter-parent自身并沒(méi)有提供任何的依賴包,我們現(xiàn)在編輯我們的pom.xml,加進(jìn)spring-boot-starter-web依賴:

<dependencies> 
    <dependency> 
        <groupId>org.springframework.boot</groupId> 
        <artifactId>spring-boot-starter-web</artifactId> 
    </dependency>
</dependencies>

如果你再次運(yùn)行mvn dependency:tree命令,你會(huì)發(fā)現(xiàn)現(xiàn)在出現(xiàn)了一些新的依賴,包括Tomcat和Spring Boot。

敲代碼

為了完成我們的應(yīng)用,我們需要?jiǎng)?chuàng)建一個(gè)Java文件。Maven默認(rèn)會(huì)從src/main/java中找到源代碼并編譯,所以你需要按照這個(gè)格式創(chuàng)建目錄結(jié)構(gòu),然后添加一個(gè)叫做src/main/java/Example.java的文件:

import org.springframework.boot.*;
import org.springframework.boot.autoconfigure.*;
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;

@RestController
@EnableAutoConfiguration
public class Example {

    @RequestMapping("/")
    String home() { 
        return "Hello World!"; 
    } 

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

}

這里沒(méi)有多少代碼,后面還會(huì)添加很多代碼進(jìn)來(lái),但現(xiàn)在讓我們從最重要的部分開(kāi)始吧。

注解@RestController和@RequestMapping

我們的Example類里面的第一個(gè)注解是@RestController,它是一個(gè)構(gòu)造型(stereotype)注解,用來(lái)標(biāo)記并且告訴Spring這個(gè)類扮演一個(gè)特殊的角色,在這個(gè)例子里面,我們的類是一個(gè)web應(yīng)用的@Controller,當(dāng)Spring要處理web請(qǐng)求的時(shí)候會(huì)找到這個(gè)類。

下面的@RequestMapping注解標(biāo)注路由(routing)信息,用來(lái)告訴Spring任何路徑為“/”的HTTP請(qǐng)求應(yīng)該被映射到home方法上。因?yàn)轭惐粯?biāo)注了@RestController注解所以這里方法返回的字符串會(huì)被Spring直接原封不動(dòng)的傳遞給請(qǐng)求者。

這里的@RestController@RequestMapping注解是Spring MVC提供的注解(它們并不是由Spring Boot提供的特殊注解),參考MVC相關(guān)文檔。

注解@EnableAutoConfiguration

上面的第二類級(jí)注解是@EnableAutoConfiguration,這個(gè)注解會(huì)讓Spring Boot基于你已添加的jar依賴來(lái)“猜測(cè)”你想怎么樣來(lái)配置Spring。如果你添加了spring-boot-starter-web因此引入了Tomcat和Spring MVC的依賴,自動(dòng)配置系統(tǒng)會(huì)假設(shè)你要開(kāi)發(fā)一個(gè)web應(yīng)用并依此幫你配置好Spring。

Starter POMs和自動(dòng)配置(Auto-Configuration)

自動(dòng)配置在設(shè)計(jì)上跟“Starter POMs”十分契合,但這兩個(gè)概念并沒(méi)有直接綁定關(guān)系,你可以自由的選擇外部jar依賴,Spring Boot還是可以很好幫助你自動(dòng)配置你的應(yīng)用。

“main”方法

我們的應(yīng)用最后一部分是main方法,這是一個(gè)遵循Java慣例的標(biāo)準(zhǔn)應(yīng)用入口方法,我們的main方法通過(guò)執(zhí)行run方法代理了Spring Boot的SpringApplication類。SpringApplication將會(huì)運(yùn)行我們的應(yīng)用,啟動(dòng)自動(dòng)配置的Tomcat服務(wù)器。我們需要將Example.class作為參數(shù)傳入run方法,以告訴Spring這是我們的首選組件,命令行參數(shù)也會(huì)通過(guò)args數(shù)組傳入。

運(yùn)行示例

到這里我們的應(yīng)用應(yīng)該可以順利運(yùn)行了,如果我們使用了spring-boot-starter-parent的POM,我們將會(huì)有一個(gè)非常有用的run goal,可以用來(lái)直接啟動(dòng)我們的應(yīng)用,在項(xiàng)目根目錄鍵入命令mvn spring-boot:run來(lái)啟動(dòng)應(yīng)用:

$ mvn spring-boot:run

  .   ____          _            __ _ _
 /\\\\ / ___'_ __ _ _(_)_ __  __ _ \\ \\ \\ \\
( ( )\\___ | '_ | '_| | '_ \\/ _` | \\ \\ \\ \\
 \\\\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot :: (v1.3.6.RELEASE)
....... . . .
....... . . . (log output here)
....... . . .
........ Started Example in 2.222 seconds (JVM running for 6.514)

打開(kāi)瀏覽器并訪問(wèn)localhost:8080你應(yīng)該可以看到如下的輸出:

Hello World!

如果想退出應(yīng)用可以按ctrl-c。

創(chuàng)建一個(gè)可執(zhí)行jar文件

讓我們創(chuàng)建一個(gè)完全自包含的并且可以在生產(chǎn)環(huán)境運(yùn)行的可執(zhí)行jar文件,以此來(lái)結(jié)束我們的示例??蓤?zhí)行jar(有時(shí)也稱為“fat jar”)是一個(gè)包含了運(yùn)行應(yīng)用所需的所有依賴的包文件。

可執(zhí)行jar和Java

Java沒(méi)有提供任何標(biāo)準(zhǔn)的機(jī)制來(lái)加載嵌套的jar文件(jar包中包含了其他jar文件),如果你想要分發(fā)一個(gè)自包含的應(yīng)用,這將成為一個(gè)阻礙。

為了解決這個(gè)問(wèn)題,很多開(kāi)發(fā)者使用“超級(jí)”jar,簡(jiǎn)單的從所有jar文件中取出所有類并一起打包在一個(gè)單獨(dú)的jar文件中。這種做法存在的問(wèn)題是你很難弄清楚你的應(yīng)用實(shí)際上在使用的是哪個(gè)庫(kù),如果不同的jar中存在同名的文件(但內(nèi)容不同)也將帶來(lái)潛在的問(wèn)題。

Spring Boot采取了一個(gè)不同的方式,允許你真正的嵌套jar文件。

想要?jiǎng)?chuàng)建一個(gè)可執(zhí)行jar文件,我們需要在pom.xml中添加spring-boot-maven-plugin,在dependencies段下面添加如下:

<build> 
    <plugins> 
        <plugin> 
            <groupId>org.springframework.boot</groupId> 
            <artifactId>spring-boot-maven-plugin</artifactId> 
        </plugin> 
    </plugins>
</build>

spring-boot-starter-parent的POM包含<executions>配置,綁定了repackage goal,如果你沒(méi)有使用parent POM,你需要自己聲明這個(gè)配置,參考插件文檔。

保存你的pom.xml并且在命令行中運(yùn)行mvn package

$ mvn package

[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building myproject 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] .... ..
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ myproject ---
[INFO] Building jar: /Users/developer/example/spring-boot-example/target/myproject-0.0.1-SNAPSHOT.jar
[INFO]
[INFO] --- spring-boot-maven-plugin:1.3.6.RELEASE:repackage (default) @ myproject ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------

這時(shí)你在target目錄中就能看到myproject-0.0.1-SNAPSHOT.jar,這個(gè)文件的大小應(yīng)該在10Mb左右。如果你想查看文件內(nèi)部的情況,可以使用jar tvf

$ jar tvf target/myproject-0.0.1-SNAPSHOT.jar

target目錄中應(yīng)該還可以看到一個(gè)小得多的文件,名為myproject-0.0.1-SNAPSHOT.jar.original,這是在Spring Boot執(zhí)行repackag之前Maven創(chuàng)建的原始jar文件。

要運(yùn)行應(yīng)用,我們可以使用java -jar命令:

$ java -jar target/myproject-0.0.1-SNAPSHOT.jar

  .   ____          _            __ _ _
 /\\\\ / ___'_ __ _ _(_)_ __  __ _ \\ \\ \\ \\
( ( )\\___ | '_ | '_| | '_ \\/ _` | \\ \\ \\ \\
 \\\\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot :: (v1.3.6.RELEASE)
....... . . .
....... . . . (log output here)
....... . . .
........ Started Example in 2.536 seconds (JVM running for 2.864)

和之前一樣,如果想退出應(yīng)用,按ctrl-c。

接下來(lái)閱讀什么內(nèi)容

希望這個(gè)章節(jié)給你提供了一些Spring Boot的基礎(chǔ),并且能幫助你創(chuàng)建好自己的應(yīng)用,打開(kāi)新世界的大門。如果你是一個(gè)任務(wù)導(dǎo)向型的開(kāi)發(fā)者,你可能想跳轉(zhuǎn)到spring.io并且查看getting started指南獲取特定Spring功能使用問(wèn)題的解決方案。我們也有Spring Boot的How-to文檔可以參考。

Spring Boot repository中也有一些樣例可以運(yùn)行。所有的樣例都是和余下的代碼相獨(dú)立的,你不需要編譯其他的代碼。

另外,邏輯上接下來(lái)應(yīng)該閱讀的內(nèi)容是“使用Spring Boot”,但如果你實(shí)在是缺乏耐心,你也可以直接跳到Spring Boot features。
.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容