了解spring-boot-starter

SpringBoot提供了針對日常企業應用研發各種場景的spring-boot-starter自動配置 依賴模塊,如此多“開箱即用”的依賴模塊,使得開發各種場景的Spring應用 更加快速和高效,本文會就幾個常見的通用spring-boot-starter模塊進行了解

一、約定優先于配置

所有的spring-boot-starter都有約定俗成的默認配置,但允許我們調整這些配置以改變默認的配置行為,即“約定優先于配置”。

簡單來講,我們可以將對SpringBoot的行為可以進行干預的配置方式劃分 為幾類:

  1. 命令行參數(Command Line Args)
  2. 系統環境變量(Environment Variables)
  3. 位于文件系統中的配置文件。
  4. 位于classpath中的配置文件。
  5. 固化到代碼中的配置項。

以上幾種方式按照優先級從高到低排列,高優先級方式提供的配置項可以覆蓋或者 優先生效

不管是位于文件系統還是classpath, SpringBoot應用默認的配置文件名叫 作application.properties,可以直接放在當前項目的根目錄下或者名稱為config 的子目錄下

二、應用日志和 spring-boot-starter-logging

Java的日志系統多種多樣,從java.util默認提供的日志支持,到log4j、 Iog4j2、commons logging等,復雜繁多,所以,應用日志系統的配置就會比較特殊,從而spring-boot-starter-logging也比較特殊一些

假如 maven 依賴中添加了 spring-boot-starter-logging:

<dependency><groupId>org.spring.framework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId>
</dependency>

那么,我們的SpringBoot應用將自動使用logback作為應用日志框架, SpringBoot 啟 動的時候,由 org.sprmgframework.boot.logging.Logging-Application- Listener根據情況初始化并使用。

SpringBoot為我們提供了很多默認的日志配置,所以,只要將spring-boot- starter-logging 作為依賴加入到當前應用的classpath,則"開箱即用”,不需要 做任何多余的配置,但假設我們要對默認SpringBoot提供的應用日志設定做調 整,則可以通過幾種方式進行配置調整:

  • 遵循logback的約定,在classpath中使用自己定制的logback.xml配置文件。

  • 在文件系統中任何一個位置提供自己的logback.xml配置文件,然后通過logging.config配置項指向這個配置文件來啟用它,比如在 application.properties中指定如下的配置。

    logging.config=/(some.path.you.defined}/any-logfile-name-1-like.log
    

SpringBoot默認允許我們通過在配置文件或者命令行等方式使用 logging.file和logging.path來自定義日志文件的名稱和存放路徑,不過, 這只是允許我們在SpringBoot框架預先定義的默認日志系統設定的基 礎上做有限的設置,如果我們希望更靈活的配置,最好通過框架特定的 配置方式提供相應的配置文件,然后通過logging.config來啟用

如果使用log4j或者Iog4j2,那么也可以釆用類似的方式將它們對應的spring-boot-starter依賴模塊加到Maven依賴中即可:

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

或者

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

但一定不要將這些完成同一目的的spring-boot-starter都加到依賴中

三、快速Web應用開發與 spring-boot-starter-web

在這個互聯網時代,使用Spring框架除了開發少數的獨立應用,大部分 情況下實際上在使用SpringMVC開發web應用,為了幫我們簡化快速搭建并 開發一個Web項目,SpringBoot為我們提供了 spring-boot-starter-web自動配 置模塊。

只要將spring-boot-starter-web加入項目的maven依賴:

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

我們就得到了一個直接可執行的Web應用,當前項目下運行mvn spring-boot:run就可以直接啟動一個使用了嵌入式tomcat服務請求的Web 應用,只不過,我們還沒有提供任何服務Web請求的Controller

接下來我們可以在當前項目下新建一個服務根路徑Web請 求的Controller實現:

@RestController
public class Indexcontroller{@RequestMapping("/")public String index(){return "hello, there";}
}

運行 mvn spring-boot:run 并訪問 http://localhost:8080,我們的Controller返回消息,一個簡單的Web應用就這樣完成了。

但是,簡單的背后,其實卻有很多“潛規則”(約定),我們只有充分了解 了這些"潛規則”,才能更好地應用spring-boot-starter-web

1、項目結構層面的約定

項目結構層面與傳統打包為war的Java Web應用的差異在于,靜態文件和 頁面模板的存放位置變了,原來是放在src/main/webapp目錄下的一系列資源, 現在都統一放在src/main/resources相應子目錄下,比如:

  • src/main/resources/static用于存放各類靜態資源,比如css, js等。
  • src/main/resources/templates 用于存放模板文件,比如 *.vm。

2、 SpringMVC框架層面的約定和定制

spring-boot-starter-web默認將為我們自動配置如下一些SpringMVC必要組件:

  • 必要的 ViewResolver,比如 ContentNegotiatingViewResolver 和 Bean- NameViewResolvero
  • 將必要的 Converter、GenericConverter 和 Formatter 等 bean 注冊到 IoC 容器。
  • 添加一系列的HttpMessageConverter以便支持對Web請求和相應的類型 轉換。
  • 自動配置和注冊 MessageCodesResolvero
  • 其他

任何時候,如果我們對默認提供的SpringMVC組件設定不滿意,都可 以在IoC容器中注冊新的同類型的bean定義來替換,或者直接提供一個基于 WebMvcConfigurerAdapter類型的bean定義來定制,甚至直接提供一個標注了 @EnableWebMvc的?Configuration配置類完全接管所有SpringMVC的相關配 置,自己完全重新配置。

3、嵌入式Web容器層面的約定和定制

spring-boot-starter-web默認使用嵌入式tomcat作為web容器對外提供 HTTP服務,默認將使用8080端口對外監聽和提供服務:

假設我們不想使用默認的嵌入式tomcat ( spring-boot-starter-tomcat自動配置模塊),那么可以引入 spring-boot-starter-jetty 或者 spring-boot-starter- undertow 作為替代方案。

假設我們不想使用默認的8080端口,那么我們可以通過更改配置項 server.port使用自己指定的端口,比如:server.port=9000

spring-boot-starter-web提供了很多以server.為前綴的配置項用于對嵌入式 Web容器提供配置,比如:

  • server.port
  • server, address
  • server, ssl.*
  • server, tomcat.*

此外SpringBoot甚至允許我們直接對嵌入式的 Web容器實例進行定制,但這里不過多贅述了

四、數據訪問與 spring-boot-starter-jdbc

大部分Java應用都需要訪問數據庫,尤其是服務層,所以,SpringBoot會為我們自動配置相應的數據訪問設施。

想SpringBoot為我們自動配置數據訪問的基礎設施,那么,我們需要 直接或者間接地依賴spring-jdbc, 一旦spring-jdbc位于我們SpringBoot應用 的classpath,即會觸發數據訪問相關的自動配置行為,最簡單的做法就是把 spring-boot-starter-jdbc 加為應用的依賴。

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

默認情況下,如果我們沒有配置任何DataSource,那么,SpringBoot會 為我們自動配置一個基于嵌入式數據庫的DataSource,這種自動配置行為其 實很適合于測試場景,但對實際的開發幫助不大,基本上我們會自己配置一個 DataSource實例

假設我們的SpringBoot應用只依賴一個數據庫,那么,使用DataSource 自動配置模塊提供的配置參數是最方便的:

spring.datasource.url=jdbc:mysql://(database host):3306/(databaseName)
spring.datasource.username=(database username}
spring.datasource.password={database password}

當然,自己配置一個DataSource也是可以的,SpringBoot也會智能地選擇 我們自己配置的這個DataSource實例

另外,SpringBoot還提供了很多其他數據訪問相關的自動配置模塊,比如 spring-boot-starter-data-jpa`spring-boot-starter-data-mongodb `等,大家可以根據 自己數據訪問的具體場景選擇使用這些自動配置模塊。

五、常見spring-boot-starter模塊及功能

spring-boot-starter
這是Spring Boot的核心啟動器,包含了自動配置、日志和YAML。

spring-boot-starter-amqp
通過spring-rabbit來支持AMQP協議(Advanced Message Queuing Protocol.)。

spring-boot-starter-aop
支持面向方面的編程即AOP,包括spring-aop和AspectJ。

spring-boot-starter-artemis
通過Apache Artemis支持JMS的API(Java Message Service API. 。

spring-boot-starter-batch
支持Spring Batch,包括HSQLDB數據庫。

spring-boot-starter-cache
支持Spring的Cache抽象。

spring-boot-starter-cloud-connectors
支持Spring Cloud Connectors,簡化了在像Cloud Foundry或Heroku這樣的云平臺上連接服務。

spring-boot-starter-data-elasticsearch
支持ElasticSearch搜索和分析引擎,包括spring-data-elasticsearch。

spring-boot-starter-data-gemfire
支持GemFire分布式數據存儲,包括spring-data-gemfire。

spring-boot-starter-data-jpa
支持JPA(Java Persistence API. ,包括spring-data-jpa、spring-orm、Hibernate)。

spring-boot-starter-data-mongodb
支持MongoDB數據,包括spring-data-mongodb。

spring-boot-starter-data-rest
通過spring-data-rest-webmvc,支持通過REST暴露Spring Data數據倉庫。

spring-boot-starter-data-solr
支持Apache Solr搜索平臺,包括spring-data-solr。

spring-boot-starter-freemarker
支持FreeMarker模板引擎。

spring-boot-starter-groovy-templates
支持Groovy模板引擎。

spring-boot-starter-hateoas
通過spring-hateoas支持基于HATEOAS的RESTful Web服務。

spring-boot-starter-hornetq
通過HornetQ支持JMS。

spring-boot-starter-integration
支持通用的spring-integration模塊。

spring-boot-starter-jdbc
支持JDBC數據庫。

spring-boot-starter-jersey
支持Jersey RESTful Web服務框架。

spring-boot-starter-jta-atomikos
通過Atomikos支持JTA分布式事務處理。

spring-boot-starter-jta-bitronix
通過Bitronix支持JTA分布式事務處理。

spring-boot-starter-mail
支持javax.mail模塊。

spring-boot-starter-mobile
支持spring-mobile。

spring-boot-starter-mustache
支持Mustache模板引擎。

spring-boot-starter-redis
支持Redis鍵值存儲數據庫,包括spring-redis。

spring-boot-starter-security
支持spring-security。基本的認證和授權功能,提供了加密解密、統一登錄等一系列相關支持

spring-boot-starter-social-facebook
支持spring-social-facebook

spring-boot-starter-social-linkedin
支持pring-social-linkedin

spring-boot-starter-social-twitter
支持pring-social-twitter

spring-boot-starter-test
支持常規的測試依賴,包括JUnit、Hamcrest、Mockito以及spring-test模塊。

spring-boot-starter-thymeleaf
支持Thymeleaf模板引擎,包括與Spring的集成。

spring-boot-starter-velocity
支持Velocity模板引擎。

spring-boot-starter-web
S支持全棧式Web開發,包括Tomcat和spring-webmvc。

spring-boot-starter-websocket
支持WebSocket開發。

spring-boot-starter-ws
支持Spring Web Services。
Spring Boot應用啟動器面向生產環境的還有2種,具體如下:

spring-boot-starter-actuator
增加了面向產品上線相關的功能,比如測量和監控。

spring-boot-starter-remote-shell
增加了遠程ssh shell的支持。
最后,Spring Boot應用啟動器還有一些替換技術的啟動器,具體如下:

spring-boot-starter-jetty
引入了Jetty HTTP引擎(用于替換Tomcat. 。

spring-boot-starter-log4j
支持Log4J日志框架。

spring-boot-starter-logging
引入了Spring Boot默認的日志框架Logback。

spring-boot-starter-tomcat
引入了Spring Boot默認的HTTP引擎Tomcat。

spring-boot-starter-undertow
引入了Undertow HTTP引擎(用于替換Tomcat.

參考:

  • 《SpringBoot揭秘+快速構建微服務體系》 第四章
  • SpringBoot 之Spring Boot Starter依賴包及作用

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/535538.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/535538.shtml
英文地址,請注明出處:http://en.pswp.cn/news/535538.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

常用腳本

mysql狀態收集 #! /bin/bash#mysql for zabbixUptime() {mysqladmin status I awk [print $2]}Slow_ queries() {mysqladmin status | awk [print $9]} ICom_ insert() {mysqladmin extended-status |awk /<Com_ insertl>/[print $4]}Com_ delete() {mysqladmi…

linux產生隨機數方法

如果產生的數據長短格式不統一&#xff0c;使用md5sum命令&#xff0c;并使用cut截取相應位數echo $RANDOM openssl rand -base64 openssl rand -base64 10 date %s%N /dev/random設備&#xff0c;存儲著系統當前運行的環境的實時數據。它可以看作是系統某個時候&#x…

oracle視圖等

視圖 視圖是基于其他表或視圖創建的邏輯表 視圖不包含自己的數據&#xff0c;它基于的表稱為基表 使用視圖是為了: 限制對數據的訪問 使復雜的查詢簡單化 提供數據的獨立性 相同的數據展現不同的視圖 不能刪除行不能修改行不能添加行 --分組函數 - -GRoUP BY子句 -…

Java集合:關于 ArrayList 的內容盤點

本篇內容包括&#xff1a;ArrayList 概述、ArrayList 的擴容機制&#xff08;包含源碼部分&#xff09;、如何在遍歷 ArrayList 時正確的移除一個元素、ArrayList 的構造方法及常用方法、關于 Array 與 ArrayList 的區別、關于 CopyOnWriteArrayList、關于 Fail Fast 與 Fail S…

Java集合:關于 LinkedList 的內容盤點

本篇內容包括&#xff1a;LinkedList 的概述、LinkedList 的結構既雙向鏈表實現與LinkedList-Node 結構、LinkedList 的使用&#xff08;構造方法&常用方法&#xff09;、關于 Queue 隊列的介紹、關于 ArrayList 和 LinkedList 的區別以及算法&#xff1a;翻轉鏈表&#xf…

shell自動化巡檢

#!/bin/bash #主機信息每日巡檢IPADDR$(ifconfig eth0|grep inet addr|awk -F [ :] {print $13}) #環境變量PATH沒設好&#xff0c;在cron里執行時有很多命令會找不到 export PATH/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin source /etc/profile…

Java集合:關于 Vector 的內容盤點

Vector 與 ArrayList 一樣&#xff0c;也是通過數組實現的&#xff0c;不同的是它支持線程的同步&#xff0c;即某一時刻只有一個線程能夠寫 Vector&#xff0c;避免多線程同時寫而引起的不一致性&#xff0c;但實現同步需要很高的花費&#xff0c;因此&#xff0c;訪問它比訪問…

memcached 的基本命令

memcached 的基本命令(安裝、卸載、啟動、配置相關)&#xff1a; -p 監聽的端口 -l 連接的 IP 地址, 默認是本機 -d start 啟動 memcached 服務 -d restart 重起 memcached 服務 -d stop|shutdown 關閉正在運行的 memcached 服務 -d install 安裝 memcached 服務 -d uninstall …

Java集合:關于 HashSet 的內容盤點

哈希表存放的是哈希值&#xff0c; HashSet 存儲元素的順序并不是按照存入時的順序&#xff08;和 List 顯然不同&#xff09; 而是按照哈希值來存的所以取數據也是按照哈希值取得。 &#xff5e; 本篇內容包括&#xff1a;HashSet 概述、HashSet 與 HashMap 的關系以及HashSet…

mysql備份腳本

#!/bin/bash #保留備份個數&#xff0c;會刪除時間較早的.dump備份 number3 #設置備份保存路徑&#xff0c;yourpath替換成自己的備份保存路徑 backup_diryourpath #日期格式 dddate %Y%m%d #備份工具 toolmysqldump #數據庫用戶名 usernameroot #數據庫密碼&#xff0c;由于密…

Java集合:關于 TreeSet 的內容盤點

TreeSet() 是使用二叉樹的原理對新 add() 的對象按照指定的順序排序&#xff08;升序、降序&#xff09;&#xff0c;每增加一個對象都會進行排序&#xff0c;將對象插入的二叉樹指定的位置&#xff1b; ~ 本篇內容包括&#xff1a;TreeSet 概述、TreeSet 的使用以及其他知識點…

python求素數

口求100內的素數 -個數能被從2開始到自己的平發根的正整數整數整除,就是合數 import math n100 for X in range(2, n): for i in range(2, math.ceil(math.sqrt(x))): if x %i 0: break else: print(x)口求100內的素數 合數一定可以分解為幾個質數的乘積 import math n100 pri…

svn鉤子腳本

REP0S"$1" REV"$2"export LANGen_US.UTF-8 LOGPATH"/app/log" [ !-d ${LOGPATH}] && mkdir $[LOGPATH) -p #update content from svn↓14 SVN/usr/bin/svn↓ SVN update --username test --password test /data/ if[ $? -eq ] then /us…

shell判斷字符串是否為數字

#1.組合語法判斷1: [ -n "echo $num|sed s/[0-9]//g" -a -n "echo $2|sed s/[0-9]//g"] &&\echo”兩個參數都必須為數字”&& exit 1#2.組合語法判斷2:[ -n "echo $num|sed s/[0-9]//g" -a -n "echo $2|sed s/[0-9]//g&…

MySQL:DQL 數據查詢語句盤點

本篇內容包括&#xff1a;DQL 的簡介、SELECT 語句、WHERE 條件語句、JOIN 連接查詢(多表查詢)和分組、過濾、排序、分頁、子查詢的使用。 一、DQL 簡介 DQL&#xff08;Data QueryLanguage&#xff09;語句&#xff0c;即數據查詢語句 常用的語句關鍵字有&#xff1a;SELECT…

MySQL:DML 數據操作語句盤點

本篇內容包括&#xff1a;DML 的簡介、INSERT 命令、UPDATE 命令、DELETE 命令以及 TRUNCATE 命令的使用。 一、DML 簡介 DML&#xff08;Data Manipulation Language&#xff09;語句&#xff0c;即數據操作語句&#xff0c;用于操作數據庫對象中所包含的數據。 常用關鍵字包…

MySQL:DDL 數據定義語句盤點

本篇內容包括&#xff1a;DDL 的簡介、SHOW 查看語句、CREATE 創建語句、ALTER 修改語句以及 DROP 刪除語句的使用。 一、DDL 簡介 DDL&#xff08;Data Definition Language&#xff09;&#xff0c;即數據定義語句&#xff0c;功能就是定義數據庫DATabase、表table、索引ind…

MySQL:DCL 數據控制語句盤點

本篇內容包括:DCL 簡介、GRANT、REVOKE、COMMIT、ROLLBACK、SAVEPOINT、LOCK命令的使用。 一、DCL 簡介 DCL&#xff08;Data Control Language&#xff09;語句&#xff0c;即數據控制語句&#xff0c;用于設置或更改數據庫用戶或角色權限的語句 常用關鍵字包括&#xff1a;…

oracle遷移父子數據

現有需求如下&#xff0c;業務組織單元表中id字段數據在另外一個系統全部重復&#xff0c;但需要將此業務單元組織導入另一系統 業務組織單元表Isc_Specialorg_Unit 表中存在ID字段為子節點數據&#xff0c;parent_id為父節點數據&#xff0c;orgpath為組織路徑 現在做如下操…

批量更新數據庫數據

"update isc22.isc_user t set t.saphrid "&E1&"where t.id "&B1&";"