構建一個簡單的Spring Boot項目

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

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命令


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

-Advertisement-
Play Games
更多相關文章
  • 一、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) ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...