Spring Boot 實戰 入門

来源:https://www.cnblogs.com/ourtest/archive/2019/07/08/11153714.html
-Advertisement-
Play Games

目前沒有系統學習過 Spring 框架,參與工作時,直接參与到了 Spring Boot 項目的開發。目前還比較菜,所以,你要是和我一樣,不妨也跳過 Spring 框架的學習,直接學習 Sring Boot。 官方文檔 的一段介紹: Spring Boot makes it easy to crea ...


目前沒有系統學習過 Spring 框架,參與工作時,直接參与到了 Spring Boot 項目的開發。目前還比較菜,所以,你要是和我一樣,不妨也跳過 Spring 框架的學習,直接學習 Sring Boot。

官方文檔 的一段介紹:

Spring Boot makes it easy to create stand-alone, production-grade Spring-based Applications that you can run. We take an opinionated view of the Spring platform and third-party libraries, so that you can get started with minimum fuss. Most Spring Boot applications need very little Spring configuration.

You can use Spring Boot to create Java applications that can be started by using java -jar or more traditional war deployments. We also provide a command line tool that runs “spring scripts”.

大體意思是說,Spring Boot 可以輕鬆創建可以運行的獨立的,基於生產級 Spring 的應用程式。這個框架簡化了我們 Spring 的配置。可以使用 Spring Boot 創建 Java 應用,只需要使用 java -jarwar 包部署方式就可以啟動。也內嵌了 Tomcat ,在開發時無需以 war 包也可以運行應用。

環境

下麵是本文編寫時,我機器的環境:

  • Java 1.8.0_181
  • Maven 3.5.4

創建項目

本文目的是創建一個基本的 RESTful Web 服務。創建 Spring Boot 服務的方式主要有兩種:

  • 在 IDEA 中使用 Spring Initializr 創建,我個人比較傾向這種方式,方便快捷;
  • 訪問網站 Spring Initializr 網站,勾選相關項目依賴,最後生成一個初始化項目,導入 IDE。
 

下麵主要介紹 IDEA 如何初始化一個 Sring Boot 項目:

1.File-New-Porject,選擇 Spring Initializr ,選擇 SDK 版本;

2.輸入項目的元數據信息,關係到項目的路徑、 pom 文件中項目的 Maven 坐標( GAV ),;

3.選擇需要的 Maven 依賴,這裡 Spring Boot 版本,我選擇了 2.1.6 版本;

4.最後一步指定項目存放位置;

  • src/main/java 中有項目代碼文件,根目錄下是入口類: SpringBootHelloWorldApplication 類。 @SpringBootApplication 註解,這是整個 Spring Boot 的核心註解,它的目的就是開啟 Spring Boot 的自動配置。
  • src/main/resources 下是配置文件: application.properties
  • src/test/ 下的測試入口:Chapter1ApplicationTests

添加控制器類 —— Controller

通常在項目中對外提供的 API 都會放在叫做 Controller 的包下。
這裡向大家推薦一個測試交流圈q裙:790047143。
我們創建一個 Controller 的包,並添加一個叫做 HelloWorld 的類:

@RestController
public class HelloWorld {

    @GetMapping("/hello")
    public String sayHello() {
        return "Hello World";
    }

}

 

  • @RestController 註解加在這個類上,使之變為一個 Controller

這是我們啟動項目,便可以通過地址 localhost:8080/hello127.0.0.1:8080/hello 看到 sayHello 函數執行的內容。

查看控制台的輸出,我們可以知道 Spring Boot 項目啟動時,預設的埠是 8080

Profile

官方文檔中有關於 Profile 的描述。 Prorile輪廓、外形、簡況 的含義,這裡我就把它理解為「配置描述」好了。

在實際項目中,生產、beta 不同環境將採用不同的配置,比如資料庫配置等等。這時候,我們只需要創建多分 Profile 文件即可。

除了 application.properties 文件,配置文件還可以採用下麵的命名規則 application-{profile}.properties 。Environment 中具有一組可選的值。如果沒有設置需要激活什麼配置文件,就預設激活 default 配置,即 application-default.properties

指定的配置文件都是從同一個位置被激活,即從標準的配置文件 application.properties

如果指定了多個配置文件,採取 last-win 策略,即「最後獲勝側率」。這句話意思是什麼呢,就是說,在你的 application.properties 中如果指定了激活好幾個配置文件,那麼,最後指定的那個配置文件才會生效。

我們分別創建兩個環境配置文件:

  • application-dev.properties 測試環境

                server.port=8081

  • application-prod.properties 生產環境

                #server.port=8082

通過 application.prperties 指定 Profile

applcation.properties 公共配置文件。激活 Dev 配置文件,需要在 application.properties 設置:

#這裡定義8080主要是為了看埠設置是否會被 dev 覆蓋
server.port=8080
spring.profiles.active=dev

 



這時候啟動程式時,我們查看控制台就可看到 Dev 環境被激活了,應用埠是 8081 。這時候觀察 application.properties 的埠設置是否會會生效。經過測試可以發現,此時 8080 埠被 Dev 的配置覆蓋了。

接著,我們激活 Prod 配置,註意,此時我將 Prod 埠配置註釋掉了,這時候觀察 application.properties 的埠設置是否會會生效。經過測試可以發現,此時 8080 埠生效了。

通過 Environment 指定 Profile

除了上面在 application.properties 指定激活的配置外,還可以在 Envirionment 中設置相關環境變數激活:

image

經過測試,我在 Environment 中設置環境變數激活了 Dev 的配置,然後在 application.properties 激活的是 Prod 的配置,最終控制台日誌顯示, Dev 配置被激活。

jar 方式運行時

如果採用 mvn clean package 打出 jar 包,那麼可以使用如下方式指定 Profile:

java -jar spring-boot-hello-world-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev

Property 值獲取

我們可以在 Profile 中指定一些 propety 的值,在程式中可以獲取到。
application-dev.properties 定義如下:

server.port=8081
author.name=Michael

接著,我們在 Controller 類中使用 @Value 註,即可獲取到這個屬性:

@RestController
public class HelloWorld {
    @Value(value = "${author.name}")
    private String authorName;

    @GetMapping("/hello")
    public String sayHello() {
        return "Hello World By " + authorName;
    }

}

 


定製 Banner

Banner 就是指我們在啟動應用時控制台一開始列印的那個內容,預設是列印 Spring Boot

  1. src/main/resorces 下新建一個名為 banner.txt 的內容;
  2. 複製你想顯示的內容到 banner.txt

個性化 Banner 來源:

送一個有趣的 Banner:

////////////////////////////////////////////////////////////////////
//                          _ooOoo_                               //
//                         o8888888o                              //
//                         88" . "88                              //
//                         (| ^_^ |)                              //
//                         O\  =  /O                              //
//                      ____/`---'\____                           //
//                    .'  \\|     |//  `.                         //
//                   /  \\|||  :  |||//  \                        //
//                  /  _||||| -:- |||||-  \                       //
//                  |   | \\\  -  /// |   |                       //
//                  | \_|  ''\---/''  |   |                       //
//                  \  .-\__  `-`  ___/-. /                       //
//                ___`. .'  /--.--\  `. . ___                     //
//              ."" '<  `.___\_<|>_/___.'  >'"".                  //
//            | | :  `- \`.;`\ _ /`;.`/ - ` : | |                 //
//            \  \ `-.   \_ __\ /__ _/   .-` /  /                 //
//      ========`-.____`-.___\_____/___.-`____.-'========         //
//                           `=---='                              //
//      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^        //
//            佛祖保佑       永不宕機     永無BUG                  //
//////////////////////////////////////////////////////////////////// 

 

補充知識

spring-boot-starter

Spring Boot 提供了很多”開箱即用“的依賴模塊,都是以 spring-boot-starter-xx 作為命名的。下麵列舉一些常用的模塊:

  • spring-boot-starter-logging :使用 Spring Boot 預設的日誌框架 Logback。
  • spring-boot-starter-log4j :添加 Log4j 的支持。
  • spring-boot-starter-web :支持 Web 應用開發,包含 Tomcat 和 spring-mvc。
  • spring-boot-starter-tomcat :使用 Spring Boot 預設的 Tomcat 作為應用伺服器。
  • spring-boot-starter-jetty :使用 Jetty 而不是預設的 Tomcat 作為應用伺服器。
  • spring-boot-starter-test :包含常用的測試所需的依賴,如 JUnit、Hamcrest、Mockito 和 spring-test 等。
  • spring-boot-starter-aop :包含 spring-aop 和 AspectJ 來支持面向切麵編程(AOP)。
  • spring-boot-starter-security :包含 spring-security。
  • spring-boot-starter-jdbc :支持使用 JDBC 訪問資料庫。
  • spring-boot-starter-redis :支持使用 Redis。
  • spring-boot-starter-data-mongodb :包含 spring-data-mongodb 來支持 MongoDB。
  • spring-boot-starter-data-jpa :包含 spring-data-jpa、spring-orm 和 Hibernate 來支持 JPA。
  • spring-boot-starter-amqp :通過 spring-rabbit 支持 AMQP。
  • spring-boot-starter-actuator : 添加適用於生產環境的功能,如性能指標和監測等功能。

SpringBoot 目錄結構

目錄結構理解

  • controller:控制層,前端控制器,負責頁面訪問控制,主要是對外提供的API介面,用戶使用服務時的入口處,可以結合swagger生成對應的API文檔
  • service:業務層,邏輯層,主要是業務類代碼,歸檔了前端控制器中相關服務的操作方法介面類,該文件夾下包含子impl文件夾,歸檔對應的實現介面
  • domain:實體類,歸檔對應的實體(Entity),一個實體嘗嘗就對應著資料庫中一張表
  • dao:數據訪問層,實體類對應的資料庫操作介面類,它與資料庫進行交互,封裝了對資料庫的CURD操作
  • config:配置信息類
  • utils:工具類
  • constant:常量介面類

當請求來了,controller 就會將相應的請求分發到相應的 service層,在 service 層中再調用 dao 層進行資料庫交互。這裡的 dao 層其實就是之前的 model 層,封裝了對資料庫的操作。這樣一來,就把業務處理邏輯從 controller 中分離出來,從而實現瞭解耦。
感謝您的觀看,如有不足之處,歡迎批評指正。

獲取資料

本次給大家推薦一個免費的學習群,裡面概括Java架構/分散式/微服務/docker/高性能高併發以及面試資源等。對Java架構感興趣的程式猿,歡迎加入Q群:790047143,不管你是剛入行得還是大牛我都歡迎,還有大牛整理的一套高效率學習路線和教程與您免費分享,同時每天更新視頻資料。
最後,祝大家早日學有所成。


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

-Advertisement-
Play Games
更多相關文章
  • 1.核心功能 此組件功能包含: 圖片裁剪(裁剪框拖動,裁剪框改變大小); 圖片馬賽克(繪製馬賽克,清除馬賽克); 圖片預覽、圖片還原(返回原圖、返回處理圖); 圖片上傳(獲取簽名、上傳圖片)。 2.核心邏輯 2.1圖片裁剪 獲取裁剪框(矩形)相對於畫布的位置(左上)和裁剪框的height、width ...
  • 工廠模式是使用頻率很高的一種設計模式,在面試中也經常問到,今天我們就來學習它。 為什麼要用工廠模式? 解答這個問題前,我們先來瞭解什麼是工廠模式。 工廠模式其實也稱創建模式,是用於創建對象的一種方式。本質上就是用工廠方法來代替new實例化對象。 舉個例子:我們在編寫代碼的時候,在一個A類中通過new ...
  • SpringCloud系列教程 | 第十篇:服務網關Zuul高級篇 Springboot: 2.1.6.RELEASE SpringCloud: Greenwich.SR1 如無特殊說明,本系列教程全採用以上版本 上一篇我們主要聊到了Zuul的使用方式,以及自動轉發機制,其實Zuul還有更多的使用姿 ...
  • 架構雜談《一》 從傳統單體架構到服務化架構的發展歷程 典型的單體架構分為三個層級,Web層、業務邏輯層和數據存儲層,每個層的指責分別如下: Web 層:負責與用戶交互或者對外提供介面 業務邏輯層:為了實現業務邏輯而設計的流程處理模塊 數據存儲層:將業務邏輯層處理的結果持久化 將不同的模塊化組件聚合後 ...
  • (詳細)高校宿舍管理系統需求分析說明書(文末-->獲取原文檔) (詳細)高校宿舍管理系統需求分析說明書(文末-->獲取原文檔) 版本狀態 版本 作者 參與者 起止日期 註釋 審閱者 團隊 版本 日期 簽名 教學管理委員會 V1.1 2019.06.13 胡桂虹 教學管理委員會 V1.2 2019.0 ...
  • 1. 什麼是冪等性 冪等性就是指:一個冪等操作任其執行多次所產生的影響均與一次執行的影響相同。用數學的概念表達是這樣的: f(f(x)) = f(x).就像 nx1 = n 一樣, x1 就是一個冪等操作。無論是乘以多少次結果都一樣。 2. 常見的冪等性問題 冪等性問題經常會是由網路問題引起的,還有 ...
  • 分類整理一些內容,方便需要時回過頭來看,整理不易,如有疏漏,請多擔待!之後要查看這篇文章,公眾號後臺回覆 “設計模式聚合” 無靈魂,不模式。 設計模式是什麼鬼(初探) 設計模式是什麼鬼(原型) 設計模式是什麼鬼(單例) 設計模式是什麼鬼(適配器) 設計模式是什麼鬼(策略) 設計模式是什麼鬼(狀態) ...
  • SpringCloud系列教程 | 第九篇:服務網關Zuul初探 Springboot: 2.1.6.RELEASE SpringCloud: Greenwich.SR1 如無特殊說明,本系列教程全採用以上版本 前面的文章我們介紹了,Eureka用於服務的註冊於發現,Feign支持服務的調用以及均衡 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...