構建一個簡單的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命令


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

更多相關文章
  • 在讀本篇文章之前如果你讀過這篇文章 "SpringBoot自動裝配原理解析" 應該會更加輕鬆 準備工作 我們知道SpringBoot的自動裝配的秘密在 包下的 文件中,而嵌入Tomcat的原理就在這個文件中載入的一個配置類: 首先看一下上方的幾個註解 1. 這個註解是決定配置類的載入順序的,當註解里 ...
  • 直接訪問redis的中國官網,在下載部分,可以看到安裝和使用的方式。wget http://download.redis.io/releases/redis-5.0.4.tar.gztar xzf redis-5.0.4.tar.gzcd redis-5.0.4make./src/redis-ser ...
  • xml即可擴展標記語言,它可以用來標記數據、定義數據類型,是一種允許用戶對自己的標記語言進行定義的源語言。 本文主要學習的ElementTree是python的XML處理模塊,它提供了一個輕量級的對象模型。在使用ElementTree模塊時,需要import xml.etree.ElementTre ...
  • 在學習Python的是後遇到點小問題,記錄下來以後忘了再來看看。 一. python2 和python3在繼承父類的時候是不同的。super() 是一個特殊的函數,幫助Python將父類和子類關聯起來。在Python3中,直接使用如下代碼: Python3 在Python2中有兩種方法: 第一種 第 ...
  • Python 入門 之 反射 通過字元串操作對象的屬性和方法 對象的角度使用反射 類的角度使用反射 當前模塊使用反射 其他模塊使用反射 反射的應用場景 ...
一周排行
  • 一、背景 代碼實例:https://gitee.com/D_C_L/CurtainEtcAOP.git我們實際系統中有很多操作,是不管做多少次,都應該產生一樣的效果或返回一樣的結果。 例如: 1. 前端重覆提交選中的數據,應該後臺只產生對應這個數據的一個反應結果。 2. 我們發起一筆付款請求,應該只 ...
  • 關鍵字:流程未來節點處理人 工作流快速開發平臺 工作流流設計 業務流程管理 asp.net 開源工作流 業務背景:一個流程在啟動起來後,是可以對一些節點計算出來處理人是誰,流程的走向。對於另外一些節點處理人有可能需要相關的人員調整的。在一些審批的環境下,需要把能夠計算出來的節點處理人在發起時計算出來... ...
  • 簡述 我們做軟體工作的雖然每天都離不開網路,可網路協議細節卻不是每個人都會接觸和深入瞭解。我今天就來和大家一起學習下Socket,並寫一個簡單的聊天程式。 一些基礎類 首先我們每天打開瀏覽器訪問網頁信息都是使用的HTTP/HTTPS協議,而HTTP是通過的TCP建立的連接。TCP底層又是通過的Soc ...
  • 點這裡進入ABP進階教程目錄 在功能按鈕區增加一個自定義按鈕 - Add(創建課程) 添加按鈕 打開展示層(即JD.CRS.Web.Mvc)的\wwwroot\view-resources\Views\Course\Index.js //用以存放Course查詢相關腳本 自帶按鈕已有五個我們再添加一 ...
  • 點這裡進入ABP進階教程目錄 我們嘗試在新增/編輯界面增加一個下拉框用來代替輸入框編輯Status 添加實體 打開領域層(即JD.CRS.Core)的Entitys目錄 //用以存放實體對象添加一個類StatusCode.cs //狀態信息 更新模型 更新查詢視圖模型 打開展示層(即JD.CRS.W ...
  • 在項目視圖中,找到-》輸出 視窗,在視窗中選擇ASP.NET Core Web伺服器,調試項目即可看到執行的sql語句 ...
  • 前言: 通過Fiddler抓取瀏覽器請求數據,相信大家已經都會用了,我們知道Fiddler是通過在本機計算器添加一個預設的代理伺服器來實現的抓包數據的,埠號為:8888。 其實當我們打開Fiddler的設置也可以看到: 然後查看本地計算器的網路代理設置: 基於上面的原理,Fiddler就實現了經過 ...
  • 場景 Winform控制項-DevExpress18下載安裝註冊以及在VS中使用: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/100061243 在上面已經實現DevExpress的安裝之後,拖拽一個TreeList,然後怎樣給 ...
  • 場景 Winform控制項-DevExpress18下載安裝註冊以及在VS中使用: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/100061243 DevExpress的TreeList怎樣設置數據源,從實例入手: https:/ ...
  • 場景 在開發中,經常會有一些全局作用域的常量、欄位、屬性、方法等。 需要將這些設置為全局作用域保存且其實例唯一。 註: 博客主頁: https://blog.csdn.net/badao_liumang_qizhi 關註公眾號 霸道的程式猿 獲取編程相關電子書、教程推送與免費下載。 實現 首先新建一 ...
x