1. 程式人生 > >SpringBoot 2.0 系列(二):流程詳解(上)

SpringBoot 2.0 系列(二):流程詳解(上)

寫在前面

本節將詳細介紹如何使用Spring Boot。它涵蓋了諸如專案管理及自動構建工具、自動配置以及如何執行應用程式等主題。我們還介紹了一些Spring Boot最佳實踐。Spring Boot沒有什麼特別之處(它只是另一個我們可以使用的庫),但是有一些約定俗成的建議(“習慣優於配置”),如果遵循這些建議,將使我們的開發過程變得更容易一些。

專案管理及自動構建工具

強烈建議您選擇一個支援依賴項管理的構建系統,我們可以使用該系統得到釋出到Maven中心倉庫的元件。這裡建議選擇Maven或Gradle。雖然Spring Boot可以與其他構建系統(例如Ant)一起工作,但是它們並沒有得到很好的支援。

1. 依賴關係管理

Spring Boot的每一個版本都提供了它所支援的一個被整理的依賴項列表。實際上,我們不需要為構建配置中的任何依賴項提供版本,因為Spring Boot會為我們管理這些依賴項,當我們升級Spring Boot的時候,這些依賴項也會以一致的方式升級。

當然如果需要,我們仍然可以指定一個版本並覆蓋Spring Boot的預設項。

Spring引導的每個版本都與Spring框架的一個基本版本相關聯。我們強烈建議您不要指定它的版本。

2. Maven

Maven使用者可以從spring-boot-starter-parent專案繼承來獲得合理的預設值。parent專案提供以下特性:

  1. Java 1.8作為預設的編譯器級別。
  2. UTF - 8編碼。
  3. 一個繼承自spring-boot-dependencies pom的依賴管理部分,管理通用依賴項的版本。這個依賴項管理可以在自己的pom中使用這些依賴項時省略< version>標記。
  4. 合理的外掛配置(exec外掛,Git commit ID和shade)。
  5. 合理的資源過濾(例如:application.properties和application.yml)。包含特定於概要檔案的檔案(例如:application-dev.properties和application-dev.yml)
2.1 繼承 Parent POM

如果需要將專案配置為從spring-boot-starter-parent繼承,請將 parent 設定為:

<!-- Inherit defaults from Spring Boot -->
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.2.RELEASE</version>
</parent>

我們應該僅在此依賴項上指定Spring Boot版本號。如果我們匯入其他starter,我們可以放心地省略版本號。

通過這種設定,我們還可以通過在自己的專案中覆蓋屬性來覆蓋各個依賴項。例如,要升級到另一個Spring-Data release系列,我們可以在我們的pom.xml中新增以下內容:

<properties>
    <spring-data-releasetrain.version>Fowler-SR2</spring-data-releasetrain.version>
</properties>
2.2 不繼承Parent POM

不是每個人都喜歡從spring-boot-starter那裡繼承。我們可能需要使用您自己的企業標準parent,或者我們可能希望顯式宣告所有的Maven配置。
如果我們不想使用spring-boot-starter-parent,我們仍然可以通過使用scope=import dependency來保持依賴關係管理(而不是外掛管理)的好處,如下所示:

<dependencyManagement>
        <dependencies>
        <dependency>
            <!-- Import dependency management from Spring Boot -->
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>2.0.2.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

前面的示例設定不允許我們通過使用屬性來覆蓋各個依賴項,如上所述。要實現相同的結果,我們需要在spring-boot-dependencies條目之前在我們的專案的依賴項管理中新增一個條目。例如,要升級到另一個Spring Data release,我們可以在我們的pom.xml中新增以下元素:

<dependencyManagement>
    <dependencies>
        <!-- Override Spring Data release train provided by Spring Boot -->
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-releasetrain</artifactId>
            <version>Fowler-SR2</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>2.0.2.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

在前面的示例中,我們指定了一個BOM,但是任何依賴型別都可以以相同的方式重寫。

3. 使用Spring Boot Maven Plugin

Spring Boot包含一個Maven外掛,可以將專案打包為可執行jar。如果我們想使用這個外掛,請將這個外掛新增到< plugins>部分,如下例所示:

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

3. Gradle

springboot與gradle的結合篇幅較長,將放在後面單獨來講,敬請期待~

4. Starters

starters是一組依賴描述符,我們可以在應用程式中包括這些描述符。我們可以為所有Spring和相關技術提供一站式服務,而無需通過示例程式碼和複製貼上的依賴描述符來進行搜尋。例如,如果我們希望開始使用Spring和JPA進行資料庫訪問,在專案中包含Spring -boot-starter-data- JPA依賴項就好。
starters包含許多依賴項,我們需要這些依賴項來快速啟動和執行專案,並且具有一組一致的、受支援的託管傳遞依賴項。

程式碼構建

Spring Boot不需要任何特定的程式碼佈局來工作。然而,有一些最佳實踐對於我們來說顯然是很有幫助的。

1. 使用預設包

當一個類不包含包宣告時,它被認為是在“預設包”中。一般不建議使用“預設包”,應該避免使用。它會給使用@ComponentScan、@EntityScan或@SpringBootApplication註解的Spring引導應用程式帶來特別的問題,因為每個jar的每個類都被讀取。

我們建議您遵循Java推薦的包命名約定,並使用一個反向的域名(例如,com.example.project)。

2. 定位 main application class

我們通常建議您將main class置於其他類之上的root packge中。@SpringBootApplication註釋通常放在主類上,它隱式地為某些項定義了基本的“搜尋包”。例如,如果我們正在編寫一個JPA應用程式,則使用@ SpringBootApplication帶註釋的類的包來搜尋@Entity項。使用根包還允許元件掃描只應用於專案。

如果我們不想使用@SpringBootApplication,那麼它匯入的@EnableAutoConfiguration和@ComponentScan註釋定義了這種行為,因此我們也可以使用它。

下面的清單展示了一個典型的佈局:

com
 +- example
 +- myapplication
     +- Application.java
     |
     +- customer
     |   +- Customer.java
     |   +- CustomerController.java
     |   +- CustomerService.java
     |   +- CustomerRepository.java
     |
     +- order
         +- Order.java
         +- OrderController.java
         +- OrderService.java
         +- OrderRepository.java

Application.java檔案將宣告主方法和基本的@SpringBootApplication,如下所示:

package com.example.myapplication;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

配置類

Spring Boot支援基於java的配置。雖然可以將SpringApplication與XML源一起使用,但是我們通常建議您的配置源是一個@Configuration類。通常,定義主方法的類作為主要的@Configuration是一個很好的選擇。

許多Spring配置示例已經在Internet上釋出,它們使用XML配置。如果可能的話,始終嘗試使用等效的基於java的配置。搜尋Enable*註釋可能是一個很好的起點。

1. 匯入額外的配置類

不需要將所有的@Configuration放在一個類中。可以使用@Import註釋來匯入其他配置類,或者我們可以使用@ComponentScan自動提取所有Spring元件,包括@Configuration類。

2. 匯入XML配置

如果必須使用基於XML的配置,建議從一個@Configuration類開始。然後可以使用@ImportResource註釋來載入XML配置檔案。

下節預告:

  • Auto-configuration
  • Spring bean和依賴項注入
  • 使用@SpringBootApplication註釋
    ……
    敬請期待 ~

相關推薦

SpringBoot 2.0 系列流程

寫在前面 本節將詳細介紹如何使用Spring Boot。它涵蓋了諸如專案管理及自動構建工具、自動配置以及如何執行應用程式等主題。我們還介紹了一些Spring Boot最佳實踐。Spring Boot沒有什麼特別之處(它只是另一個我們可以使用的庫),但是有一些約

MVC之前的那點事兒系列2HttpRuntime分析

文章內容 從上章文章都知道,asp.net是執行在HttpRuntime裡的,但是從CLR如何進入HttpRuntime的,可能大家都不太清晰。本章節就是通過深入分析.Net4的原始碼來展示其中的重要步驟。請先看下圖:   首先,CLR在初始化載入的時候,會載入一個非常重要的類AppManagerApp

springboot 2.0.3.RELEASE + druid 1.1.10 多資料來源可用讀寫分離 + mysql + ssm搭建

開始,先上一張專案總體圖片:1、springboot熱部署中idea配置、怎樣一步一步搭建就不說了。2、用到的技術點:springboot全域性異常處理,springboot熱部署,aop,ssm,mysql,druid sql監控,druid多資料來源切換(可以做讀寫分離)

算法系列計算中國農曆

        世界各國的日曆都是以天為最小單位,但是關於年和月的演算法卻各不相同,大致可以分為三類:陽曆--以天文年作為日曆的主要週期,例如:中國公曆(格里曆)陰曆--以天文月作為日曆的主要週期,例如:伊斯蘭曆陰陽曆--以天文年和天文月作為日曆的主要週期,例如:中國農曆我國

elasticsearch系列索引分詞器、文檔管理、路由

ces com dex 合並 pda ams 最新 case dbi 一、分詞器 1. 認識分詞器 1.1 Analyzer 分析器 在ES中一個Analyzer 由下面三種組件組合而成: character filter :字符過濾器,對文本進行字符過濾處理,

java基礎學習總結十五logback

為什麼使用logback logback大約有以下的一些優點: 核心重寫、測試充分、初始化記憶體載入更小,這一切讓logback效能和log4j相比有諸多倍的提升 logback非常自然地直接實現了slf4j,這個嚴格來說算不上優點,只是這樣,再理解slf4j的前提下會很容易理解

探索 SpringBoot 啟動流程()

探索 SpringBoot (二) 啟動流程詳解 文章目錄 探索 SpringBoot (二) 啟動流程詳解 1 緣起 2 環境配置 3 SpringApplication 準備階段 3.1 推斷 web ap

C語言面向物件程式設計繼承2

在 C 語言面向物件程式設計(一)裡說到繼承,這裡再詳細說一下。     C++ 中的繼承,從派生類與基類的關係來看(出於對比 C 與 C++,只說公有繼承): 派生類內部可以直接使用基類的 public 、protected 成員(包括變數

C語言面向物件程式設計繼承

    C++ 中的繼承,從派生類與基類的關係來看(出於對比 C 與 C++,只說公有繼承): 派生類內部可以直接使用基類的 public 、protected 成員(包括變數和函式) 使用派生類的物件,可以像訪問派生類自己的成員一樣訪問基類的成員  對於被派生

Spring Cloud系列十六 Zuul過濾器Finchley.RC2版本

Zuul核心過濾器 通過前兩篇對Zuul的介紹,我們對於Zuul的有了一個大概的印象:它包含了對請求的路由和過濾兩個功能,其中路由功能負責將外部請求轉發到具體的微服務例項上,是實現外部訪問統一入口的基礎;而過濾器功能則負責對請求的處理過程進行干預,是實現請求校驗、服務聚

zookeeper入門學習原理

一 .Zookeeper功能簡介 ZooKeeper 是一個開源的分散式協調服務,由雅虎建立,是 Google Chubby 的開源實現。 分散式應用程式可以基於 ZooKeeper 實現諸如資料釋出/訂閱、負載均衡、命名服務、分散式協 調/通知

解讀ASP.NET 5 & MVC6系列6Middleware

在第1章專案結構分析中,我們提到Startup.cs作為整個程式的入口點,等同於傳統的Global.asax檔案,即:用於初始化系統級的資訊(例如,MVC中的路由配置)。本章我們就來一一分析,在這裡如何初始化這些系統級的資訊。 新舊版本之間的Pipeline區別 ASP.NET 5和之前版本的最大區別是對HT

MVC之前的那點事兒系列3HttpRuntime分析

文章內容 話說,經過各種各樣複雜的我們不知道的內部處理,非託管程式碼正式開始呼叫ISPAIRuntime的ProcessRequest方法了(ISPAIRuntime繼承了IISPAIRuntime介面,該介面可以和COM進行互動,並且暴露了ProcessRequest介面方法)。至於為什麼要呼叫這個方法,

elasticsearch系列搜尋搜尋API、Query DSL

{  "took": 60,  "timed_out": false,  "_shards": {    "total": 5,    "successful": 5,    "skipped": 0,    "failed": 0  },  "hits": {    "total": 1000,    "m

十三原型模式clone方法原始碼的簡單剖析

 作者:zuoxiaolong8810(左瀟龍),轉載請註明出處,特別說明:本博文來自博主原部落格,為保證新部落格中博文的完整性,特複製到此留存,如需轉載請註明新部落格地址即可。               &nbs

訪問者模式偽動態雙分派

 作者:zuoxiaolong8810(左瀟龍),轉載請註明出處,特別說明:本博文來自博主原部落格,為保證新部落格中博文的完整性,特複製到此留存,如需轉載請註明新部落格地址即可。               本次LZ

十一狀態模式DOTA版

作者:zuoxiaolong8810(左瀟龍),轉載請註明出處,特別說明:本博文來自博主原部落格,為保證新部落格中博文的完整性,特複製到此留存,如需轉載請註明新部落格地址即可。                本次LZ

Dubbo概念篇Dubbo ,架構演變及優缺點

架構演變 單一應用框架(ORM) 當網站流量很小時,只需一個應用,將所有功能如下單支付等都部署在一起,以減少部署節點和成本。 缺點:單一的系統架構,使得在開發過程中,佔用的資源越來越多,而且隨著流量的增加越來越難以維護。 垂直應用框架(MVC) 垂直應用架構解決了單一應用架

探索 SpringBoot 啟動流程(下)

探索 SpringBoot (三) 啟動流程詳解(下) 文章目錄 探索 SpringBoot (三) 啟動流程詳解(下) 4 SpringBoot 執行階段 4.1 Spring 應用執行監聽者的載入和執行 4.2

“全棧2019”Java第二十八章陣列

難度 初級 學習時間 10分鐘 適合人群 零基礎 開發語言 Java 開發環境 JDK v11 IntelliJ IDEA v2018.3 文章原文連結 “全棧2019”Java第二十八章:陣列詳解(上篇) 下一章 “全棧2019”Java第二十九章:陣列詳解(中篇)