構建一個簡單的Spring Boot項目

来源:https://www.cnblogs.com/deky97/archive/2019/10/08/11638633.html

11 構建一個簡單的Spring Boot項目 這個章節描述如何通過Spring Boot構建一個“Hello Word”web應用,側重介紹Spring Boot的一些重要功能。因為大多數的開發工具都支持Maven,所以我們使用它來構建這個應用。 網站 "spring.io" 包含了許多如何開始使 ...


11 構建一個簡單的Spring Boot項目

這個章節描述如何通過Spring Boot構建一個“Hello Word”web應用,側重介紹Spring Boot的一些重要功能。因為大多數的開發工具都支持Maven,所以我們使用它來構建這個應用。

網站 spring.io 包含了許多如何開始使用Spring Boot的指南。如果您需要解決具體的問題,可以先去這裡看看。你可以跳過以下的步驟,通過 start.spring.io 網站來構建項目。這樣做的話,你就可以直接編寫代碼啦。如果需要瞭解更多詳情,點擊 Spring Initializr documentation

在我們開始之前,先打開命令終端,運行以下命令,確認Java的版本和Maven的安裝。

個人備註:Spring Boot在2.0以下,1.21以上包含1.21版本,jdk版本要求1.7;
2.0以上包含2.0 jdk版本要求1.8+

$ java -version
java version "1.8.0_102"
Java(TM) SE Runtime Environment (build 1.8.0_102-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.102-b14, mixed mode)
$ mvn -v
Apache Maven 3.5.4 (1edded0938998edf8bf061f1ceb3cfdeccf443fe; 2018-06-17T14:33:14-04:00)
Maven home: /usr/local/Cellar/maven/3.3.9/libexec
Java version: 1.8.0_102, vendor: Oracle Corporation

11.1 創建POM文件

我們需要從創建Maven的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 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>2.1.8.RELEASE</version>
    </parent>

    <!-- Additional lines to be added here... -->
    <!-- 在此處添加其他行... -->
</project>

通過以上的操作,應該可以正常將項目構建好,然後你可以通過運行mvn package命令來打包項目,這時候你可以忽略“jar will be empty - no content was marked for inclusion!”警告。
做完以上的步驟,你就可以將項目導入到類似IDEA的開發工具中。因為這個項目比較簡單,我們繼續用簡單的text編輯器來構建項目,這樣來的更為方便。

11.2 添加項目依賴

Spring Boot提交了許多“啟動器”讓你選擇添加到項目依賴中。我們的示例已經在POM的部分章節中使用了spring-boot-starter-parent。它是一種特殊的啟動器,提供了預設的Maven配置。它還提供了dependency-management部分,讓你可以不用指定依賴包版本引用依賴的jar包。
其他的“啟動器”提供了一些特殊開發需要的依賴。比如當我們開發web應用的時候,我們添加spring-boot-starter-web依賴。在此之前,我們先看看我們現在有哪些依賴,運行一下命令。

$ mvn dependency:tree

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

mvn dependency:tree這個命令會以樹形結構展示你項目的依賴。你可以看到spring-boot-starter-parent沒有為自己提供任何依賴。為了讓web應用可以正常運行,現在在你的pom.xml文件中添加“spring-boot-starter-web”依賴,具體如下所示:

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

如果現在你再運行一次mvn dependency:tree命令,你會看到多出很多其他的依賴包,比如Tomcat web Server和Spring Boot。

11.3 編寫代碼

為了讓完成我們的web應用,我們編寫一個簡單的Java類。Maven預設編譯src/main/java下的代碼,所以你需要在這個路徑下新建Example.java類,然後添加如下代碼:

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

@RestController
@EnableAutoConfiguration
public class Example {

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

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

}

儘管這裡的代碼量沒有很多,但是做了的事情卻不少,下麵來具體介紹下這裡面的重要部分。

11.3.1 註解 @RestController 和註解 @RequestMapping

在上面示例代碼Example.java類中,@RestController是我們使用的第一個註解。這個註解被稱之為構造型註解。對於我們來說,它暗示著這個類在Spring Boot中具有特殊的意義,即,這個類是web控制器,用來捕捉進來的請求。

@RequestMapping註解提供了路由信息,它告訴Spring任何HTTP以“/”路徑的請求都將被映射到home方法中。@RestController還告訴了Spring將結果直接以字元串的方式返回到請求方。

@RequestMapping@RestController註解是Spring MVC的註解,跟Spring Boot沒有具體的關係,如果想要瞭解更多,可以看MVC章節的相關文檔

11.3.2 @EnableAutoConfiguration註解

第二個使用在類上面的註釋是 @EnableAutoConfiguration,這個註解告訴Spring通過你在應用添加的依賴包來猜測你對Spring的配置(其實用猜測不是特別的準確,就是通過已經有的jar包,提供預設的配置)。因為spring-boot-starter-web已經添加了Tomcat和Spring MVC,自動化配置就會假設你在開發Spring Web項目,從而會依照Web開發為你做相應的配置。

啟動器和自動化配置
自動化配置設計的宗旨是同啟動器協同工作,但是它們之間沒有直接的聯繫。也就說,你可以自由的選擇啟動器以外的jar包,Spring Boot依然會儘可能為你的應用做自動化配置。

11.3.3 main方法

應用最後的部分就是這個“main”方法,這隻是一個遵循了Java標準的程式入口方法。通過調用run方法,我們的“main”方法委托給了Spring Boot的SpringApplication類,SpringApplication再引導我們的應用,啟動Spring,啟動自動配置的Tomcat。我們需要將Example.class作為參數傳遞給SpringApplication,以便它知道哪部分才是Spring的重要組件。args數組也可以通過命令行參數傳遞。

11.4 啟動Example項目

到了這裡,你的應用應該可以正常啟動運行了。因為你已經添加了在POM里引用了spring-boot-starter-parent,你還有一個有效的程式運行入口。在文件的根目錄運行終端,輸入mvn spring-boot:run啟動你的項目,你應該會看到類似於下麵的輸出:

$ mvn spring-boot:run

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

如果你打開了一個瀏覽器,輸入地址: localhost:8080,你將會看到如下的輸出:

Hello World!

想要關閉應用,只需要輸入ctrl + C即可。

11.5創建一個可執行的Jar包

最後,我們通過創一個完全包含所需要的jar的應用來結束示例。可執行的jar(有時候被稱之為“fat jars”,實在不知道怎麼翻譯這個詞,胖夾?汗)將會包含已編譯的class文件和運行時所需要的所有依賴jar。

Executable jars and Java
Java沒有提供嵌套jar的標準方法,這可能會導致你在分發應用的時候出現問題。
為瞭解決這個問題,許多開發人員使用“uber”jars,一個uber jar可以將class和應用所有的依賴打包成單個完成物,一般就是一個jar。這種方式的問題在於,打包完成後,你就很難看到其中包含了哪些依賴包了。還有種情況就是如果兩個包名是一樣的,但內容卻不一樣,這也可能引發問題。
Spring Boot提供了另一種方式解決這個問題,具體查看different approach

為了完成一個完整的jar包,我們需要在應用pom文件中添加如下的代碼:

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

spring-boot-starter-parent已經在POM中綁定了打包目標,如果你沒有使用這個,你需要自己申明使用。
保存你的pom.xml文件,運行一下命令:

$ 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:2.1.8.RELEASE:repackage (default) @ myproject ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------

如果你打開target目錄你將會看到myproject-0.0.1-SNAPSHOT.jar,這個jar包大概在10M左右的樣子。如果你想看到裡面的內容,可以運行jar tvf命令,具體如下:

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

運行完後,你將會在target目錄中看到一個名為myproject-0.0.1-SNAPSHOT.jar.original的文件,這是Maven在打包Spring Boot項目原始的文件。
運行項目,使用java -jar命令,具體如下:

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

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

跟上面一樣,關閉應用使用Ctrl + C命令


您的分享是我們最大的動力!

更多相關文章
  • 一、IDE上繼續新建工程 1.在src目錄下新建軟體包:package機制後面再講,目前先用著 2.給package命名一個名稱:com.bjpowernode.java_learning 3.軟體包下新建一個類 4.軟體包是Java語法中的一部分,後面再講 面向對象的封裝性 二、快捷鍵 CTRL ...
  • 1. 基本類型包裝類 大家回想下,在第三篇文章中我們學習Java中的基本數據類型時,說Java中有8種基本的數據類型,可是這些數據是基本數據,想對其進行複雜操作,變的很難。怎麼辦呢? 1.1 基本類型包裝類概述 在實際程式使用中,程式界面上用戶輸入的數據都是以字元串類型進行存儲的。而程式開發中,我們 ...
  • 1. 快速入門 (1)我們從官網下載源碼 BCrypt 官網 http://www.mindrot.org/projects/jBCrypt/ (2)新建工程,將源碼類BCrypt拷貝到工程 (3)新建測試類,main方法中編寫代碼,實現對密碼的加密 String gensalt = BCrypt. ...
  • 1. 正則表達式 1.1 正則表達式的概念 正則表達式(英語:Regular Expression,在代碼中常簡寫為regex)。 正則表達式是一個字元串,使用單個字元串來描述、用來定義匹配規則,匹配一系列符合某個句法規則的字元串。在開發中,正則表達式通常被用來檢索、替換那些符合某個規則的文本。 1 ...
  • 1989,為了度過聖誕假期,Guido開始編寫Python語言編譯器。Python這個名字來自Guido的喜愛的電視連續劇《蒙蒂蟒蛇的飛行馬戲團》。他希望新的語言Python能夠滿足他在C和Shell之間創建全功能、易學、可擴展的語言的願景。 今天,世界上有將近600種編程語言,但也有20種流行語言 ...
  • 類型參數 表現形式:在名稱後面以方括弧表示, 何處使用 class 中,用於定義變數、入參、返回值 函數、方法 類型邊界 上邊界 compareTo Comparable` 的子類型,即需要添加上邊界 scala class Pair[T : LowerBound` 替換第一個元素為 T 的父類 R ...
  • ① 下載JDBC-MySQL資料庫驅動 鏈接:https://pan.baidu.com/s/1KtSZZ5hXlxu2QrmsXg3lkA 提取碼:1pbl ② 載入JDBC-MySQL資料庫驅動 範例:MySQL資料庫驅動載入 Class.forNmae("com.mysql.jdbc.Driv ...
  • python day 5 2019/10/08 學習資料來自老男孩教育 [TOC] 1. 匿名函數lambda 函數名就是變數,使用lambda表達來創建一些簡單功能的函數。 lambda定義簡單函數時,比用def定義要簡潔,會用在map,reduce,filter等函數中。 def f1(x,y) ...
一周排行
  • 背景 當我們對ASP.Net Core內部的某些方法、類的實現感興趣時,有很多方法可以去瞭解,看書,看各種文章,但是最直接也是最深入的辦法就是去閱讀源代碼。ASP.NET Core的源代碼托管在Github,項目地址是:https://github.com/dotnet/aspnetcore。如果只 ...
  • 1. 前言 Xceed wpftoolkit提供了一個 "CheckListBox" ,效果如下: 不過它用起來不怎麼樣,與其這樣還不如參考UWP的ListView實現,而且動畫效果也很好看: 它的樣式如下: 屬性是很多了,但這裡沒有自定義CheckBox樣式的方法,而且也沒法參考它的動畫如何實現。 ...
  • 定義委托 委托實例化 定義具體執行的方法 綁定方法 觸發委托 ...
  • 文章出處: https://www.cnblogs.com/dotnet261010/p/6275821.html 一、WPF簡介 WPF:WPF即Windows Presentation Foundation,翻譯為中文“Windows呈現基礎”,是微軟推出的基於Windows Vista的用戶界 ...
  • 前言 IdentityServer4(以下簡稱 Id4) 是 Asp.Net Core 中一個非常流行的 OpenId Connect 和 OAuth 2.0 框架,可以輕鬆集成到 Asp.Net Core 應用中,並且與 Asp.Net Core Identity 也可以輕鬆集成。博客園也有大佬發 ...
  • //從第1個開始,依次向左插入值。如果鍵不存在,先創建再插入值 隊列形式 先進後出,後進先出 //插入後形式 <-- 10,9,8,7,6,5,4,3,2,1 <-- 方向向左依次進行 stopwatch.Start(); for (int i = 0; i < 10; i++) { var get ...
  • 過濾漢字 Regex.Replace(inputStr,@"[\u4e00-\u9fa5]",string.Empty); 提取漢字: Regex.Replace(inputStr,@"[^\u4e00-\u9fa5]",string.Empty);//註意這裡多了個^符號 ...
  • String類型很簡單,就不做示例演示了,這裡只貼出Helper類 /// <summary> /// 判斷key是否存在 /// </summary> /// <param name="key"></param> /// <param name="db"></param> /// <returns ...
  • 通過上一章的學習,Geometry抽象類表示形狀或路徑。Drawing抽象類扮演了互補的角色,它表示2D圖畫(Drawing)——換句話說,它包含了顯示矢量圖像或點陣圖需要的所有信息。 儘管有幾類畫圖類,但只有GeometryDrawing類能使用已經學習過的幾何圖形。它增加了決定如何繪製圖形的畫筆和 ...
  • 以控台的形式,運行.net core mvc 代碼, Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>();//指定網路主機要使用的啟動類型 ...
x