了解spring-boot-starter
SpringBoot提供了針對日常企業(yè)應(yīng)用研發(fā)各種場景的spring-boot-starter自動配置 依賴模塊,如此多“開箱即用”的依賴模塊,使得開發(fā)各種場景的Spring應(yīng)用 更加快速和高效,本文會就幾個常見的通用spring-boot-starter模塊進(jìn)行了解
一、約定優(yōu)先于配置
所有的spring-boot-starter都有約定俗成的默認(rèn)配置,但允許我們調(diào)整這些配置以改變默認(rèn)的配置行為,即“約定優(yōu)先于配置”。
簡單來講,我們可以將對SpringBoot的行為可以進(jìn)行干預(yù)的配置方式劃分 為幾類:
以上幾種方式按照優(yōu)先級從高到低排列,高優(yōu)先級方式提供的配置項(xiàng)可以覆蓋或者 優(yōu)先生效
不管是位于文件系統(tǒng)還是classpath, SpringBoot應(yīng)用默認(rèn)的配置文件名叫 作application.properties,可以直接放在當(dāng)前項(xiàng)目的根目錄下或者名稱為config 的子目錄下
二、應(yīng)用日志和 spring-boot-starter-logging
Java的日志系統(tǒng)多種多樣,從java.util默認(rèn)提供的日志支持,到log4j、 Iog4j2、commons logging等,復(fù)雜繁多,所以,應(yīng)用日志系統(tǒng)的配置就會比較特殊,從而spring-boot-starter-logging也比較特殊一些
假如 maven 依賴中添加了 spring-boot-starter-logging:
<dependency><groupId>org.spring.framework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId> </dependency>那么,我們的SpringBoot應(yīng)用將自動使用logback作為應(yīng)用日志框架, SpringBoot 啟 動的時候,由 org.sprmgframework.boot.logging.Logging-Application- Listener根據(jù)情況初始化并使用。
SpringBoot為我們提供了很多默認(rèn)的日志配置,所以,只要將spring-boot- starter-logging 作為依賴加入到當(dāng)前應(yīng)用的classpath,則"開箱即用”,不需要 做任何多余的配置,但假設(shè)我們要對默認(rèn)SpringBoot提供的應(yīng)用日志設(shè)定做調(diào) 整,則可以通過幾種方式進(jìn)行配置調(diào)整:
-
遵循logback的約定,在classpath中使用自己定制的logback.xml配置文件。
-
在文件系統(tǒng)中任何一個位置提供自己的logback.xml配置文件,然后通過logging.config配置項(xiàng)指向這個配置文件來啟用它,比如在 application.properties中指定如下的配置。
logging.config=/(some.path.you.defined}/any-logfile-name-1-like.log
SpringBoot默認(rèn)允許我們通過在配置文件或者命令行等方式使用 logging.file和logging.path來自定義日志文件的名稱和存放路徑,不過, 這只是允許我們在SpringBoot框架預(yù)先定義的默認(rèn)日志系統(tǒng)設(shè)定的基 礎(chǔ)上做有限的設(shè)置,如果我們希望更靈活的配置,最好通過框架特定的 配置方式提供相應(yīng)的配置文件,然后通過logging.config來啟用
如果使用log4j或者Iog4j2,那么也可以釆用類似的方式將它們對應(yīng)的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應(yīng)用開發(fā)與 spring-boot-starter-web
在這個互聯(lián)網(wǎng)時代,使用Spring框架除了開發(fā)少數(shù)的獨(dú)立應(yīng)用,大部分 情況下實(shí)際上在使用SpringMVC開發(fā)web應(yīng)用,為了幫我們簡化快速搭建并 開發(fā)一個Web項(xiàng)目,SpringBoot為我們提供了 spring-boot-starter-web自動配 置模塊。
只要將spring-boot-starter-web加入項(xiàng)目的maven依賴:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId> </dependency>我們就得到了一個直接可執(zhí)行的Web應(yīng)用,當(dāng)前項(xiàng)目下運(yùn)行mvn spring-boot:run就可以直接啟動一個使用了嵌入式tomcat服務(wù)請求的Web 應(yīng)用,只不過,我們還沒有提供任何服務(wù)Web請求的Controller
接下來我們可以在當(dāng)前項(xiàng)目下新建一個服務(wù)根路徑Web請 求的Controller實(shí)現(xiàn):
@RestController public class Indexcontroller{@RequestMapping("/")public String index(){return "hello, there";} }運(yùn)行 mvn spring-boot:run 并訪問 http://localhost:8080,我們的Controller返回消息,一個簡單的Web應(yīng)用就這樣完成了。
但是,簡單的背后,其實(shí)卻有很多“潛規(guī)則”(約定),我們只有充分了解 了這些"潛規(guī)則”,才能更好地應(yīng)用spring-boot-starter-web
1、項(xiàng)目結(jié)構(gòu)層面的約定
項(xiàng)目結(jié)構(gòu)層面與傳統(tǒng)打包為war的Java Web應(yīng)用的差異在于,靜態(tài)文件和 頁面模板的存放位置變了,原來是放在src/main/webapp目錄下的一系列資源, 現(xiàn)在都統(tǒng)一放在src/main/resources相應(yīng)子目錄下,比如:
- src/main/resources/static用于存放各類靜態(tài)資源,比如css, js等。
- src/main/resources/templates 用于存放模板文件,比如 *.vm。
2、 SpringMVC框架層面的約定和定制
spring-boot-starter-web默認(rèn)將為我們自動配置如下一些SpringMVC必要組件:
- 必要的 ViewResolver,比如 ContentNegotiatingViewResolver 和 Bean- NameViewResolvero
- 將必要的 Converter、GenericConverter 和 Formatter 等 bean 注冊到 IoC 容器。
- 添加一系列的HttpMessageConverter以便支持對Web請求和相應(yīng)的類型 轉(zhuǎn)換。
- 自動配置和注冊 MessageCodesResolvero
- 其他
任何時候,如果我們對默認(rèn)提供的SpringMVC組件設(shè)定不滿意,都可 以在IoC容器中注冊新的同類型的bean定義來替換,或者直接提供一個基于 WebMvcConfigurerAdapter類型的bean定義來定制,甚至直接提供一個標(biāo)注了 @EnableWebMvc的?Configuration配置類完全接管所有SpringMVC的相關(guān)配 置,自己完全重新配置。
3、嵌入式Web容器層面的約定和定制
spring-boot-starter-web默認(rèn)使用嵌入式tomcat作為web容器對外提供 HTTP服務(wù),默認(rèn)將使用8080端口對外監(jiān)聽和提供服務(wù):
假設(shè)我們不想使用默認(rèn)的嵌入式tomcat ( spring-boot-starter-tomcat自動配置模塊),那么可以引入 spring-boot-starter-jetty 或者 spring-boot-starter- undertow 作為替代方案。
假設(shè)我們不想使用默認(rèn)的8080端口,那么我們可以通過更改配置項(xiàng) server.port使用自己指定的端口,比如:server.port=9000
spring-boot-starter-web提供了很多以server.為前綴的配置項(xiàng)用于對嵌入式 Web容器提供配置,比如:
- server.port
- server, address
- server, ssl.*
- server, tomcat.*
此外SpringBoot甚至允許我們直接對嵌入式的 Web容器實(shí)例進(jìn)行定制,但這里不過多贅述了
四、數(shù)據(jù)訪問與 spring-boot-starter-jdbc
大部分Java應(yīng)用都需要訪問數(shù)據(jù)庫,尤其是服務(wù)層,所以,SpringBoot會為我們自動配置相應(yīng)的數(shù)據(jù)訪問設(shè)施。
想SpringBoot為我們自動配置數(shù)據(jù)訪問的基礎(chǔ)設(shè)施,那么,我們需要 直接或者間接地依賴spring-jdbc, 一旦spring-jdbc位于我們SpringBoot應(yīng)用 的classpath,即會觸發(fā)數(shù)據(jù)訪問相關(guān)的自動配置行為,最簡單的做法就是把 spring-boot-starter-jdbc 加為應(yīng)用的依賴。
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId> </dependency>默認(rèn)情況下,如果我們沒有配置任何DataSource,那么,SpringBoot會 為我們自動配置一個基于嵌入式數(shù)據(jù)庫的DataSource,這種自動配置行為其 實(shí)很適合于測試場景,但對實(shí)際的開發(fā)幫助不大,基本上我們會自己配置一個 DataSource實(shí)例
假設(shè)我們的SpringBoot應(yīng)用只依賴一個數(shù)據(jù)庫,那么,使用DataSource 自動配置模塊提供的配置參數(shù)是最方便的:
spring.datasource.url=jdbc:mysql://(database host):3306/(databaseName) spring.datasource.username=(database username} spring.datasource.password={database password}當(dāng)然,自己配置一個DataSource也是可以的,SpringBoot也會智能地選擇 我們自己配置的這個DataSource實(shí)例
另外,SpringBoot還提供了很多其他數(shù)據(jù)訪問相關(guān)的自動配置模塊,比如spring-boot-starter-data-jpa`spring-boot-starter-data-mongodb `等,大家可以根據(jù) 自己數(shù)據(jù)訪問的具體場景選擇使用這些自動配置模塊。
五、常見spring-boot-starter模塊及功能
spring-boot-starter
這是Spring Boot的核心啟動器,包含了自動配置、日志和YAML。
spring-boot-starter-amqp
通過spring-rabbit來支持AMQP協(xié)議(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數(shù)據(jù)庫。
spring-boot-starter-cache
支持Spring的Cache抽象。
spring-boot-starter-cloud-connectors
支持Spring Cloud Connectors,簡化了在像Cloud Foundry或Heroku這樣的云平臺上連接服務(wù)。
spring-boot-starter-data-elasticsearch
支持ElasticSearch搜索和分析引擎,包括spring-data-elasticsearch。
spring-boot-starter-data-gemfire
支持GemFire分布式數(shù)據(jù)存儲,包括spring-data-gemfire。
spring-boot-starter-data-jpa
支持JPA(Java Persistence API. ,包括spring-data-jpa、spring-orm、Hibernate)。
spring-boot-starter-data-mongodb
支持MongoDB數(shù)據(jù),包括spring-data-mongodb。
spring-boot-starter-data-rest
通過spring-data-rest-webmvc,支持通過REST暴露Spring Data數(shù)據(jù)倉庫。
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服務(wù)。
spring-boot-starter-hornetq
通過HornetQ支持JMS。
spring-boot-starter-integration
支持通用的spring-integration模塊。
spring-boot-starter-jdbc
支持JDBC數(shù)據(jù)庫。
spring-boot-starter-jersey
支持Jersey RESTful Web服務(wù)框架。
spring-boot-starter-jta-atomikos
通過Atomikos支持JTA分布式事務(wù)處理。
spring-boot-starter-jta-bitronix
通過Bitronix支持JTA分布式事務(wù)處理。
spring-boot-starter-mail
支持javax.mail模塊。
spring-boot-starter-mobile
支持spring-mobile。
spring-boot-starter-mustache
支持Mustache模板引擎。
spring-boot-starter-redis
支持Redis鍵值存儲數(shù)據(jù)庫,包括spring-redis。
spring-boot-starter-security
支持spring-security。基本的認(rèn)證和授權(quán)功能,提供了加密解密、統(tǒng)一登錄等一系列相關(guān)支持
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
支持常規(guī)的測試依賴,包括JUnit、Hamcrest、Mockito以及spring-test模塊。
spring-boot-starter-thymeleaf
支持Thymeleaf模板引擎,包括與Spring的集成。
spring-boot-starter-velocity
支持Velocity模板引擎。
spring-boot-starter-web
S支持全棧式Web開發(fā),包括Tomcat和spring-webmvc。
spring-boot-starter-websocket
支持WebSocket開發(fā)。
spring-boot-starter-ws
支持Spring Web Services。
Spring Boot應(yīng)用啟動器面向生產(chǎn)環(huán)境的還有2種,具體如下:
spring-boot-starter-actuator
增加了面向產(chǎn)品上線相關(guān)的功能,比如測量和監(jiān)控。
spring-boot-starter-remote-shell
增加了遠(yuǎn)程ssh shell的支持。
最后,Spring Boot應(yīng)用啟動器還有一些替換技術(shù)的啟動器,具體如下:
spring-boot-starter-jetty
引入了Jetty HTTP引擎(用于替換Tomcat. 。
spring-boot-starter-log4j
支持Log4J日志框架。
spring-boot-starter-logging
引入了Spring Boot默認(rèn)的日志框架Logback。
spring-boot-starter-tomcat
引入了Spring Boot默認(rèn)的HTTP引擎Tomcat。
spring-boot-starter-undertow
引入了Undertow HTTP引擎(用于替換Tomcat.
參考:
- 《SpringBoot揭秘+快速構(gòu)建微服務(wù)體系》 第四章
- SpringBoot 之Spring Boot Starter依賴包及作用
總結(jié)
以上是生活随笔為你收集整理的了解spring-boot-starter的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Shell 信号发送与捕捉
- 下一篇: python for while enu