閱讀693 返回首頁    go 技術社區[雲棲]


《Spring Boot官方指南》(二)入門(二)

3.2.5 命令行補全工具

Spring Boot CLI附帶了一些腳本,這些腳本為BASH 和zsh提供了命令行補全功能。在任何shell裏麵都可以source到這些腳本(也叫spring),也可以初始化到個人或者係統級別的命令行工具裏麵。在Debian係統裏麵,係統級別的腳本在這個路徑:/shell-completion/bash,shell程序啟動以後,這裏麵的所有腳本都可以執行。例如,您已經使用SDKMAN!安裝了這些腳本,為了手動執行他們,可以這樣操作:

$ . ~/.sdkman/candidates/springboot/current/shell-completion/bash/spring
$ spring <HIT TAB HERE>
  grab  help  jar  run  test  version
[Note] Note
如果您使用Homebrew或者MacPorts安裝了Spring Boot CLI,這些命令行補全腳本已經自動注入到了您的shell程序裏麵。

3.2.6 快速開始Spring CLI實例

這是一個極其簡單的Web應用程序,可以用來驗證您的安裝是否正確。新建一個文件,文件名是app.groovy

@RestController
class ThisWillActuallyRun {

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

}

然後簡單運行一下這個命令:

$ spring run app.groovy
[Note] Note
第一次運行這個應用程序,要下載一些依賴項目,將會耗費一些時間。以後再運行的話就會快很多了。

打開您的瀏覽器訪問localhost:8080,應該可以得到下麵的內容:

Hello World!

3.3 升級舊版本的Spring Boot

如果想要從舊版本的Spring Boot升級,檢查一下存放在這裏project wiki 的 “release notes”。您可以找到升級信息與每個版本的“新的和值得關注的”功能列表以及說明。

使用相關的包管理工具升級您已經使用命令行安裝過的早期版本(比如,brew upgrade),另外,如果您是手動安裝的CLI,閱讀這個標準說明,同時記得更新環境變量PATH的值,以便移除舊版本的引用。

4. 開發第一個Spring Boot應用程序

用Java語言開發一個簡單的Web應用程序“Hello World!”,我們將會特別提到一些Spring Boot關鍵特性。就用Maven來構建這個項目,因為很多IDE都支持Maven。

[Tip] Tip
這個網站spring.io有很多使用了Spring Boot的 “入門”級別教程。如果需要解決個別的問題,可以先去這個網站找找看。可以簡化下麵的開發步驟。訪問網站start.spring.io,在依賴搜索裏麵選擇web啟動。這樣就可以自動生成一個新的項目框架,以便您以恰當的方式開始編寫您的代碼。更多有關的細節,可以查看文檔

在我們開始之前,打開終端確認您已經安裝了恰當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
[Note] Note
這個實例創建在自己的目錄中。接下來內容假定您已經創建好了恰當的目錄,這個目錄叫“當前目錄”。

4.1 創建POM

我們從創建一個Mavenpom.xml文件開始。pom.xml是用來構建您的項目的描述性文件。用文本編輯器把下麵的內容輸入到這個文件。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="https://maven.apache.org/POM/4.0.0" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="https://maven.apache.org/POM/4.0.0 https://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.4.1.BUILD-SNAPSHOT</version>
    </parent>

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

    <!-- (you don't need this if you are using a .RELEASE version) -->
    <repositories>
        <repository>
            <id>spring-snapshots</id>
            <url>https://repo.spring.io/snapshot</url>
            <snapshots><enabled>true</enabled></snapshots>
        </repository>
        <repository>
            <id>spring-milestones</id>
            <url>https://repo.spring.io/milestone</url>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>spring-snapshots</id>
            <url>https://repo.spring.io/snapshot</url>
        </pluginRepository>
        <pluginRepository>
            <id>spring-milestones</id>
            <url>https://repo.spring.io/milestone</url>
        </pluginRepository>
    </pluginRepositories>
</project>

像這樣,應該可以進行構建工作了,運行一下命令mvn package看看輸出信息(現在暫時忽略這個警告信息“jar will be empty – no content was marked for inclusion!”)。

[Note] Note
現在您也可以把這個項目導入進入一個IDE了(大多數的現代JAVA IDE內置了Maven)。為了方便,我們繼續使用純文本編輯器來開發這個例子。

4.2 添加classpath依賴

Spring Boot提供了一些“Starters”,讓您方便把jar文件添加到您的classpath。我們的實例已經在POM文件的parent部分添加了
spring-boot-starter-parentspring-boot-starter-parent是一個添加了一些默認Maven配置的特殊的starter。也添加了dependency-management部分,這個部分可以讓您省掉某些依賴項的version標簽。

其他的 “Starters”添加了在您開發其他特定類型應用程序的時候,您很可能需要添加的一些依賴項。我們目前正在開發Web應用,我們需要添加依賴項spring-boot-starter-web,不過我們先通過下麵的方式看看目前的情況。

$ mvn dependency:tree

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

mvn dependency:tree命令輸出了項目依賴項的樹狀示意圖。您會發現spring-boot-starter-parent本身並沒有引入任何依賴。編輯pom.xml文件, 把spring-boot-starter-web依賴添加到parent部分的下麵:

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

再次運行一下mvn dependency:tree,您可以發現現在增加了一些依賴項,包括Tomcat Web服務器和Spring Boot。

4.3 編寫代碼

需要編寫一個簡單的Java文件來完成我們的應用程序。Maven默認在src/main/java這個目錄下編譯源文件,所以您創建好目錄,然後新建一個源文件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);
    }

}

雖然代碼量不多,不多其實內容很豐富。我們逐步理解一下關鍵步驟。

4.3.1 @RestController和@RequestMapping注解

Example類的第一個注解是@RestController。這叫做構造型注解。它提示我們,對Spring來說,這個類扮演了特殊的角色,現在,這個類是一個Web控製器,Spring將會使用它來處理Web請求。

@RequestMapping注解展示了 “routing”信息。它告知Spring路徑為“/”的HTTP請求都會映射到home方法。@RestController告知Spring直接將結果字符串返回給請求方。

[Tip] Tip
@RestController@RequestMapping注解屬於 Spring MVC(它們不屬於Spring Boot).更多資料,可以查看Spring參考文檔的MVC 部分

4.3.2 @EnableAutoConfiguration注解

第二個類級別的注解是@EnableAutoConfiguration。 這個注解告知Spring Boot自己 “判斷”您是如何配置Spring的,這基於您添加的依賴項。因為依賴項spring-boot-starter-web添加了Tomcat和Spring MVC,所以@EnableAutoConfiguration注解會判斷您是在開發Web應用程序並且引入了Spring。

Starters and Auto-Configuration

Auto-configuration是為了和“Starters”一起良好工作而設計的,但是這兩個部分並沒有耦合在一起。您在starters的約束之外自由挑選jar依賴,而Spring Boot將會盡可能的自配置以適應您的應用程序。

4.3.3 “main”方法

應用程序的最後一部分是main方法。這隻是Java規範的一個標準的應用程序入口方法。我們的main方法委托了SpringApplication類去調用run方法完成這個功能。SpringApplication會啟動我們的應用程序,啟動Spring去開啟自配置的Tomcat Web服務器。我們需要把Example.class作為參數傳送到run方法,告知SpringApplication這是一個主要是的Spring組件。args字符串數組也傳入了,以處理命令行提供的參數。

4.4 運行這個例子

現在我們的程序應該可以工作了。因為我們在POM文件裏麵使用了spring-boot-starter-parent,所以我們可以使用run指令來啟動應用程序了。在項目根目錄輸入mvn spring-boot:run啟動應用程序:

$ mvn spring-boot:run

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

打開瀏覽器訪問localhost:8080,您應該可以看到輸出了下麵的內容:

Hello World!

敲擊ctrl-c就能退出程序了。

4.5 創建可執行jar文件

就像生產一個真正的軟件產品,我們創建一個完整自足的可執行jar文件,把我們的第一個實例完成。可執行的jar文件(有時候我們也叫“富jar文件”)是一個歸檔文件,包含了編譯好的類文件與我們運行程序所需要的所有jar依賴項。

可執行jar文件與Java

Java並沒有提供任何加載內嵌jar文件的標準方法(也就是jar文件還包含jar文件)。所以,如果您想發布一個完整的應用程序,將會很困難。

為了解決這個問題,許多開發者使用“uber” jars。 一個uber jar文件把所有的類,包括第三方jar包的類,都歸檔到一個文件。這也帶來了問題,這將難以辨認哪些庫是您的應用程序真正采用的。還有,如果多個jar文件裏麵采用了相同的文件名(但是內容不同),也會引起問題。

Spring Boot采用了一種不同的方式來讓您直接加載內嵌的jar包。

為了創建可執行jar文件,我們把spring-boot-maven-plugin添加到pom.xml。把下麵的代碼添加到dependencies部分下麵:

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>
[Note] Note
spring-boot-starter-parentPOM包含綁定到repackage目標的<executions>配置。如果不使用parentPOM,你需要自己聲明該配置,具體參考插件文檔

保存pom.xml,並從命令行運行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.4.1.BUILD-SNAPSHOT:repackage (default) @ myproject ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------

如果查看target目錄,你應該可以看到myproject-0.0.1-SNAPSHOT.jar,該文件大概有10Mb。想查看內部結構,可以運行jar tvf

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

在該目錄下,你應該還能看到一個很小的名為myproject-0.0.1-SNAPSHOT.jar.original的文件, 這是在Spring Boot重新打包前,Maven創建的原始jar文件。

使用java -jar命令運行該程序:

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

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

正如剛才一樣,敲擊ctrl-c退出應用。

5. 接下來閱讀什麼

希望本章的內容已經讓您理解了部分Spring Boot的基礎知識,並且掌握了以您的方式開發應用程序的方法。如果您麵向任務的類型的開發人員,您可能想要直接跳到spring.io,查閱一些解決“怎樣和Spring一起工作”這個問題的入門教程。我們也有一些Spring Boot定製的怎麼做的參看文檔。

Spring Boot倉庫也可以運行的一些例子。這些例子和其他代碼無關的(也就是說您不需要構建其他的代碼就能運行或者使用這些例子)。

另外,按照順序,接下來的內容是Part III, “Using Spring Boot”.。如果您真的缺乏耐心,可以繼續往前,閱讀Spring Boot特性

 轉載自 並發編程網 - ifeve.com

最後更新:2017-05-19 14:06:27

  上一篇:go  萬維網之父獲2016年圖靈獎,專訪Tim Berners-Lee: 我創建萬維網的初衷
  下一篇:go  【雲棲TechDay有問必答】NLP技術的應用及思考