構建一個簡單的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
  • Timer是什麼 Timer 是一種用於創建定期粒度行為的機制。 與標準的 .NET System.Threading.Timer 類相似,Orleans 的 Timer 允許在一段時間後執行特定的操作,或者在特定的時間間隔內重覆執行操作。 它在分散式系統中具有重要作用,特別是在處理需要周期性執行的 ...
  • 前言 相信很多做WPF開發的小伙伴都遇到過表格類的需求,雖然現有的Grid控制項也能實現,但是使用起來的體驗感並不好,比如要實現一個Excel中的表格效果,估計你能想到的第一個方法就是套Border控制項,用這種方法你需要控制每個Border的邊框,並且在一堆Bordr中找到Grid.Row,Grid. ...
  • .NET C#程式啟動閃退,目錄導致的問題 這是第2次踩這個坑了,很小的編程細節,容易忽略,所以寫個博客,分享給大家。 1.第一次坑:是windows 系統把程式運行成服務,找不到配置文件,原因是以服務運行它的工作目錄是在C:\Windows\System32 2.本次坑:WPF桌面程式通過註冊表設 ...
  • 在分散式系統中,數據的持久化是至關重要的一環。 Orleans 7 引入了強大的持久化功能,使得在分散式環境下管理數據變得更加輕鬆和可靠。 本文將介紹什麼是 Orleans 7 的持久化,如何設置它以及相應的代碼示例。 什麼是 Orleans 7 的持久化? Orleans 7 的持久化是指將 Or ...
  • 前言 .NET Feature Management 是一個用於管理應用程式功能的庫,它可以幫助開發人員在應用程式中輕鬆地添加、移除和管理功能。使用 Feature Management,開發人員可以根據不同用戶、環境或其他條件來動態地控制應用程式中的功能。這使得開發人員可以更靈活地管理應用程式的功 ...
  • 在 WPF 應用程式中,拖放操作是實現用戶交互的重要組成部分。通過拖放操作,用戶可以輕鬆地將數據從一個位置移動到另一個位置,或者將控制項從一個容器移動到另一個容器。然而,WPF 中預設的拖放操作可能並不是那麼好用。為瞭解決這個問題,我們可以自定義一個 Panel 來實現更簡單的拖拽操作。 自定義 Pa ...
  • 在實際使用中,由於涉及到不同編程語言之間互相調用,導致C++ 中的OpenCV與C#中的OpenCvSharp 圖像數據在不同編程語言之間難以有效傳遞。在本文中我們將結合OpenCvSharp源碼實現原理,探究兩種數據之間的通信方式。 ...
  • 一、前言 這是一篇搭建許可權管理系統的系列文章。 隨著網路的發展,信息安全對應任何企業來說都越發的重要,而本系列文章將和大家一起一步一步搭建一個全新的許可權管理系統。 說明:由於搭建一個全新的項目過於繁瑣,所有作者將挑選核心代碼和核心思路進行分享。 二、技術選擇 三、開始設計 1、自主搭建vue前端和. ...
  • Csharper中的表達式樹 這節課來瞭解一下表示式樹是什麼? 在C#中,表達式樹是一種數據結構,它可以表示一些代碼塊,如Lambda表達式或查詢表達式。表達式樹使你能夠查看和操作數據,就像你可以查看和操作代碼一樣。它們通常用於創建動態查詢和解析表達式。 一、認識表達式樹 為什麼要這樣說?它和委托有 ...
  • 在使用Django等框架來操作MySQL時,實際上底層還是通過Python來操作的,首先需要安裝一個驅動程式,在Python3中,驅動程式有多種選擇,比如有pymysql以及mysqlclient等。使用pip命令安裝mysqlclient失敗應如何解決? 安裝的python版本說明 機器同時安裝了 ...