天天看點

問題式知識庫系列:SpringBoot幹貨實踐及知識庫(附腦圖)

SpringBoot知識庫

一、SpringBoot入門 - SpringBoot HelloWorld

我們了解了SpringBoot和SpringFramework的關系之後,我們可以開始建立一個Hello World級别的項目了。

SpringBoot入門 - SpringBoot HelloWorld

  • 為什麼我們添加一個starter-web子產品便可以了呢?
  • 我們如何更改更多Server的配置呢?比如Tomcat Server
  • SpringBoot還提供了哪些starter子產品呢?
  • 建立 SpringBoot Web 應用
  • 初始化後内容
  • 給你的第一個應用添加包和代碼
  • 運作你的第一個程式
  • 一些思考
  • 示例源碼

建立 SpringBoot Web 應用

為快速進行開發,推薦你使用IDEA這類開發工具,它将大大提升你學習和開發的效率。

選擇 Spring Initialize

Spring提供的初始化項目的工具

問題式知識庫系列:SpringBoot幹貨實踐及知識庫(附腦圖)

當然你可以在https://start.spring.io/在新視窗打開中初始化你項目工程

問題式知識庫系列:SpringBoot幹貨實踐及知識庫(附腦圖)

填寫 GAV三元組

  • Group: 是公司或者組織的名稱,是一種命名空間的概念,比如網站,那麼group可以是tech
  • Artifat: 目前項目的唯一辨別
  • Version: 項目的版本号,一般xx-SNAPSHOT表示非穩定版
問題式知識庫系列:SpringBoot幹貨實踐及知識庫(附腦圖)

選擇初始化子產品

Spring Initialize可以幫助你選擇常見的功能子產品的starter包

問題式知識庫系列:SpringBoot幹貨實踐及知識庫(附腦圖)

項目名

最後我們輸入我們項目的名稱,既可以初始化項目

問題式知識庫系列:SpringBoot幹貨實踐及知識庫(附腦圖)

初始化後内容README.md

README中可以添加這個項目的介紹,它将顯示在github/gitlab/gitee等倉庫托管中項目介紹的首頁。

問題式知識庫系列:SpringBoot幹貨實踐及知識庫(附腦圖)

.gitignore

gitignore是git倉庫,你可以将不需要送出到代碼倉庫的檔案添加到這個檔案(比如程式編譯後生成的運作目錄target等),預設如下

HELP.md
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**
!**/src/test/**

## STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache

## IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr

## NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/

## VS Code ###
.vscode/pom.xml           

在Maven包管理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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.3</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>

<modelVersion>4.0.0</modelVersion>
<groupId>tech</groupId>
<artifactId>101-springboot-demo-helloworld</artifactId>
<version>1.0-SNAPSHOT</version>

<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>

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

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

</project>           

給你的第一個應用添加包和代碼

我們添加如下的代碼,啟動即可啟動一個WEB服務,通過浏覽器通路/hello, 并傳回Hello world.添加代碼

package tech.springboot.helloworld;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
* @author 
*/
@SpringBootApplication
@RestController
public class SpringBootHelloWorldApplication {

/**
* main interface.
*
* @param args args
*/
public static void main(String[] args) {
SpringApplication.run(SpringBootHelloWorldApplication.class, args);
}

/**
* hello world.
*
* @return hello
*/
@GetMapping("/hello")
public ResponseEntity<String> hello() {
return new ResponseEntity<>("hello world", HttpStatus.OK);
}

} 運作你的第一個程式           

點選SpringBootHelloWorldApplication入口的綠色按鈕,運作程式

問題式知識庫系列:SpringBoot幹貨實踐及知識庫(附腦圖)

運作後,你将看到如下的資訊:表明我們啟動程式成功(啟動了一個内嵌的Tomcat容器,服務端口在8080)

問題式知識庫系列:SpringBoot幹貨實踐及知識庫(附腦圖)

這時候我們便可以通過浏覽器通路服務

問題式知識庫系列:SpringBoot幹貨實踐及知識庫(附腦圖)

一些思考

到此,你會發現一個簡單的web程式居然完成了。這裡你需要一些思考:

為什麼我們添加一個starter-web子產品便可以了呢?

我們安裝Maven Helper的插件,用來檢視spring-boot-starter-web子產品的依賴

問題式知識庫系列:SpringBoot幹貨實踐及知識庫(附腦圖)

我們看下這個子產品的依賴,你便能初步窺探出子產品支撐

問題式知識庫系列:SpringBoot幹貨實踐及知識庫(附腦圖)

我們如何更改更多Server的配置呢?比如Tomcat Server

為什麼Tomcat預設端口是8080? 如前文所述,SpringBoot最強大的地方在于約定大于配置,隻要你引入某個子產品的xx-start包,它将自動注入配置,提供了這個子產品的功能;比如這裡我們在POM中添加了如下的包

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

它内嵌了Tomcat并且提供了預設的配置,比如預設端口是8080.

我們可以在application.properties或者application.yml中配置

問題式知識庫系列:SpringBoot幹貨實踐及知識庫(附腦圖)

特别的,如果你添加了如下包

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>           

并且你的IDE支援(比如IDEA商業版),可以自動給你配置提示

問題式知識庫系列:SpringBoot幹貨實踐及知識庫(附腦圖)

你也可以(cmd+點選)進入具體的配置檔案。

SpringBoot還提供了哪些starter子產品呢?Spring Boot 推薦的基礎 POM 檔案

問題式知識庫系列:SpringBoot幹貨實踐及知識庫(附腦圖)
問題式知識庫系列:SpringBoot幹貨實踐及知識庫(附腦圖)

所有這些 POM 依賴的好處在于為開發 Spring 應用提供了一個良好的基礎。Spring Boot 所選擇的第三方庫是經過考慮的,是比較适合産品開發的選擇。但是 Spring Boot 也提供了不同的選項,比如日志架構可以用 Logback 或 Log4j,應用伺服器可以用 Tomcat 或 Jetty

示例源碼https://github.com/realpdai/tech-pdai-spring-demos

下面來提供一些有關SpringBoot的一些奇怪的問題,需要的時候再檢視哦

1、什麼是 Spring Boot?

多年來,随着新功能的增加,spring 變得越來越複雜。隻需通路https://springio/projects 頁面,我們就會看到可以在我們的應用程式中使用的所有 Spring 項目的不同功能。如果必須啟動一個新的 Spring 項目,我們必須添加建構路徑或添加 Maven 依賴關系,配置應用程式伺服器,添加 spring 配置。是以,開始一個新的 spring 項目需要很多努力,因為我們現在必須從頭開始做所有事情。Spring Boot 是解決這個問題的方法。Spring Boot 已經建立在現有 spring 架構之上。使用 spring 啟動,我們避免了之前我們必須做的所有樣闆代碼和配置。是以,Spring Boot 可以幫助我們以最少的工作量,更加健壯地使用現有的 Spring功能。

2、Spring Boot 有哪些優點?

Spring Boot 的優點有:

1、減少開發,測試時間和努力。

2、使用 JavaConfig 有助于避免使用 XML。

3、避免大量的 Maven 導入和各種版本沖突。

4、提供意見發展方法。

5、通過提供預設值快速開始開發。

6、沒有單獨的 Web 伺服器需要。這意味着你不再需要啟動 Tomcat,Glassfish或其他任何東西。

7、需要更少的配置 因為沒有 webxml 檔案。隻需添加用@ Configuration 注釋的類,然後添加用@Bean 注釋的方法,Spring 将自動加載對象并像以前一樣對其進行管理。您甚至可以将@Autowired 添加到 bean 方法中,以使 Spring 自動裝入需要的依賴關系中。

8、基于環境的配置 使用這些屬性,您可以将您正在使用的環境傳遞到應用程式: -Dspringprofilesactive = {enviornment}。在加載主應用程式屬性檔案後, Spring 将在(application{environment} properties)中加載後續的應用程式屬性檔案。

3、什麼是 JavaConfig?

Spring JavaConfig 是 Spring 社群的産品,它提供了配置 Spring IoC 容器的純Java 方法。是以它有助于避免使用 XML 配置。使用 JavaConfig 的優點在于:

1、面向對象的配置。由于配置被定義為 JavaConfig 中的類,是以使用者可以充分利用 Java 中的面向對象功能。一個配置類可以繼承另一個,重寫它的@Bean方法等。

2、減少或消除 XML 配置。基于依賴注入原則的外化配置的好處已被證明。但是,許多開發人員不希望在 XML 和 Java 之間來回切換。JavaConfig 為開發人員提供了一種純 Java 方法來配置與 XML 配置概念相似的 Spring 容器。從技術角度來講,隻使用 JavaConfig 配置類來配置容器是可行的,但實際上很多人認為将JavaConfig 與 XML 混合比對是理想的。

3、類型安全和重構友好。JavaConfig 提供了一種類型安全的方法來配置 Spring容器。由于 Java 50 對泛型的支援,現在可以按類型而不是按名稱檢索 bean,不需要任何強制轉換或基于字元串的查找。

4、如何重新加載 Spring Boot 上的更改,而無需重新啟動伺服器?

這可以使用DEV 工具來實作。通過這種依賴關系,您可以節省任何更改,嵌入式tomcat 将重新啟動。Spring Boot 有一個開發工具(DevTools)子產品,它有助于提高開發人員的生産力。Java 開發人員面臨的一個主要挑戰是将檔案更改自動部署到伺服器并自動重新開機伺服器。開發人員可以重新加載 Spring Boot 上的更改,而無需重新啟動伺服器。這将消除每次手動部署更改的需要。Spring Boot 在釋出它的第一個版本時沒有這個功能。這是開發人員最需要的功能。DevTools 子產品完全滿足開發人員的需求。該子產品将在生産環境中被禁用。它還提供 H2 資料庫控制台以更好地測試應用程式。

<dependency>

<groupId>orgspringframeworkboot</groupId>

<artifactId>spring-boot-devtools</artifactId>

<optional>true</optional>

5、Spring Boot 中的螢幕是什麼?

Spring boot actuator 是 spring 啟動架構中的重要功能之一。Spring boot 螢幕可幫助您通路生産環境中正在運作的應用程式的目前狀态。有幾個名額必須在生産環境中進行檢查和監控。即使一些外部應用程式可能正在使用這些服務來向相關人員觸發警報消息。螢幕子產品公開了一組可直接作為 HTTP URL 通路的REST 端點來檢查狀态。

6、如何在 Spring Boot 中禁用 Actuator 端點安全性?

預設情況下,所有敏感的HTTP 端點都是安全的,隻有具有 ACTUATOR 角色的使用者才能通路它們。安全性是使用标準的 HttpServletRequestisUserInRole 方法實施的。我們可以使用來禁用安全性。隻有在執行機構端點在防火牆後通路時,才建議禁用安全性。

7、如何在自定義端口上運作 Spring Boot 應用程式?

為了在自定義端口上運作Spring Boot 應用程式,您可以在 applicationproperties 中指定端口。serverport = 8090

8、什麼是 YAML?

YAML 是一種人類可讀的資料序列化語言。它通常用于配置檔案。與屬性檔案相比,如果我們想要在配置檔案中添加複雜的屬性,YAML 檔案就更加結構化,而且更少混淆。可以看出 YAML 具有分層配置資料。

9、如何實作 Spring Boot 應用程式的安全性?

為了實作Spring Boot 的安全性,我們使用 spring-boot-starter-security 依賴項,并且必須添加安全配置。它隻需要很少的代碼。配置類将必須擴充WebSecurityConfigurerAdapter 并覆寫其方法。

10、如何內建 Spring Boot 和 ActiveMQ?

對于內建Spring Boot 和 ActiveMQ,我們使用依賴關系。 它隻需要很少的配置,并且不需要樣闆代碼。

11、如何使用 Spring Boot 實作分頁和排序?

使用Spring Boot 實作分頁非常簡單。使用 Spring Data-JPA 可以實作将可分頁的傳遞給存儲庫方法。

12、什麼是 Swagger?你用 Spring Boot 實作了它嗎?

Swagger 廣泛用于可視化 API,使用 Swagger UI 為前端開發人員提供線上沙箱。Swagger 是用于生成 RESTful Web 服務的可視化表示的工具,規範和完整架構實作。它使文檔能夠以與伺服器相同的速度更新。當通過 Swagger 正确定義時,消費者可以使用最少量的實作邏輯來了解遠端服務并與其進行互動。是以,Swagger消除了調用服務時的猜測。

13、什麼是 Spring Profiles?

Spring Profiles 允許使用者根據配置檔案(dev,test,prod 等)來注冊 bean。是以,當應用程式在開發中運作時,隻有某些 bean 可以加載,而在 PRODUCTION中,某些其他 bean 可以加載。假設我們的要求是 Swagger 文檔僅适用于 QA 環境,并且禁用所有其他文檔。這可以使用配置檔案來完成。Spring Boot 使得使用配置檔案非常簡單。

14、什麼是 Spring Batch?

Spring Boot Batch 提供可重用的函數,這些函數在處理大量記錄時非常重要,包括日志/跟蹤,事務管理,作業處理統計資訊,作業重新啟動,跳過和資源管理。它還提供了更先進的技術服務和功能,通過優化和分區技術,可以實作極高批量和高性能批處理作業。簡單以及複雜的大批量批處理作業可以高度可擴充的方式利用架構處理重要大量的資訊。

15、什麼是 FreeMarker 模闆?

FreeMarker 是一個基于 Java 的模闆引擎,最初專注于使用 MVC 軟體架構進行動态網頁生成。使用 Freemarker 的主要優點是表示層和業務層的完全分離。程式員可以處理應用程式代碼,而設計人員可以處理 html 頁面設計。最後使用freemarker 可以将這些結合起來,給出最終的輸出頁面。

16、如何使用 Spring Boot 實作異常處理?

Spring 提供了一種使用 ControllerAdvice 處理異常的非常有用的方法。 我們通過實作一個 ControlerAdvice 類,來處理控制器類抛出的所有異常。

17、您使用了哪些 starter maven 依賴項?

使用了下面的一些依賴項spring-boot-starter-activemq、spring-boot-starter-security這有助于增加更少的依賴關系,并減少版本的沖突。

18、什麼是 CSRF 攻擊?

CSRF 代表跨站請求僞造。這是一種攻擊,迫使最終使用者在目前通過身份驗證的Web 應用程式上執行不需要的操作。CSRF 攻擊專門針對狀态改變請求,而不是資料竊取,因為攻擊者無法檢視對僞造請求的響應。

19、什麼是 WebSockets?

WebSocket 是一種計算機通信協定,通過單個 TCP 連接配接提供全雙工通信信道。

1、WebSocket 是雙向的 -使用 WebSocket 用戶端或伺服器可以發起消息發送。

2、WebSocket 是全雙工的 -用戶端和伺服器通信是互相獨立的。

3、單個 TCP 連接配接 -初始連接配接使用 HTTP,然後将此連接配接更新到基于套接字的連接配接。然後這個單一連接配接用于所有未來的通信

4、Light -與 http 相比,WebSocket 消息資料交換要輕得多。

20、什麼是 AOP?

在軟體開發過程中,跨越應用程式多個點的功能稱為交叉問題。這些交叉問題與應用程式的主要業務邏輯不同。是以,将這些橫切關注與業務邏輯分開是面向方面程式設計(AOP)的地方。

21、什麼是 Apache Kafka?

Apache Kafka 是一個分布式釋出 - 訂閱消息系統。它是一個可擴充的,容錯的釋出 - 訂閱消息系統,它使我們能夠建構分布式應用程式。這是一個 Apache 頂級項目。Kafka 适合離線和線上消息消費。

22、我們如何監視所有 Spring Boot 微服務?

Spring Boot 提供螢幕端點以監控各個微服務的度量。這些端點對于擷取有關應用程式的資訊(如它們是否已啟動)以及它們的元件(如資料庫等)是否正常運作很有幫助。但是,使用螢幕的一個主要缺點或困難是,我們必須單獨打開應用程式的知識點以了解其狀态或健康狀況。想象一下涉及 50 個應用程式的微服務,管理者将不得不擊中所有 50 個應用程式的執行終端。 為了幫助我們處理這種情況,我們将使用位于的開源項目。 它建立在 Spring Boot Actuator 之上,它提供了一個 Web UI,使我們能夠可視化多個應用程式的度量。

你學廢了嗎

準備面試?

工作遇到問題?

想要積累知識?

快速搜尋無處不在的:7TCoding

問題式知識庫系列:SpringBoot幹貨實踐及知識庫(附腦圖)
問題式知識庫系列:SpringBoot幹貨實踐及知識庫(附腦圖)

往期内容回顧:

1、網際網路知識庫合集【詳見腦圖】

2、知識庫系列:Zookeeper和Mybatis(持續更新)

3、知識庫系列:Dubbo(附腦圖-持續更新)

4、知識庫系列:分布式搜尋和分析引擎Elasticsearch(附腦圖-持續更新)

5、知識庫系列:Redis(附腦圖-持續更新)

6、知識庫系列:分布式的高速緩存系統Memcached(附腦圖-持續更新)

7、知識庫系列:MySQL(附腦圖-持續更新)

8、知識庫系列:Java基礎1+2(附腦圖-持續更新)

9、知識庫系列:5萬長文Java知識Java3+4(附腦圖-持續更新)

10、知識庫系列:Spring 知識庫(一)(附腦圖-持續更新)

11、知識庫系列:微服務系列(附腦圖-持續更新)

持續更新中......

更多精彩,請加入我們哦!