接下來(lái)關(guān)于SpringBoot的一系列文章和例子,都來(lái)自《Spring Boot Cookbook》這本書,本文的主要內(nèi)容是start.spring.io的使用、Spring Boot的自動(dòng)配置以及CommandRunner的角色和應(yīng)用場(chǎng)景。
創(chuàng)新互聯(lián)是一家專注網(wǎng)站建設(shè)、網(wǎng)絡(luò)營(yíng)銷策劃、小程序定制開(kāi)發(fā)、電子商務(wù)建設(shè)、網(wǎng)絡(luò)推廣、移動(dòng)互聯(lián)開(kāi)發(fā)、研究、服務(wù)為一體的技術(shù)型公司。公司成立十年以來(lái),已經(jīng)為上千家成都銅雕雕塑各業(yè)的企業(yè)公司提供互聯(lián)網(wǎng)服務(wù)。現(xiàn)在,服務(wù)的上千家客戶與我們一路同行,見(jiàn)證我們的成長(zhǎng);未來(lái),我們一起分享成功的喜悅。首先帶你瀏覽http://start.spring.io/,在這個(gè)網(wǎng)址中有一些Spring Boot提供的組件,然后會(huì)給你展示如何讓你的Spring工程變得“Bootiful”,我稱之為“Boot化”。
在網(wǎng)站Spring Initializr上填對(duì)應(yīng)的表單,描述Spring Boot項(xiàng)目的主要信息,例如Project Metadata、Dependency等。在Project Dependencies區(qū)域,你可以根據(jù)應(yīng)用程序的功能需要選擇相應(yīng)的starter。
Spring Boot starters可以簡(jiǎn)化Spring項(xiàng)目的庫(kù)依賴管理,將某一特定功能所需要的依賴庫(kù)都整合在一起,就形成一個(gè)starter,例如:連接數(shù)據(jù)庫(kù)、springmvc、spring測(cè)試框架等等。簡(jiǎn)單來(lái)說(shuō),spring boot使得你的pom文件從此變得很清爽且易于管理。
常用的starter以及用處可以列舉如下:
spring-boot-starter: 這是核心Spring Boot starter,提供了大部分基礎(chǔ)功能,其他starter都依賴于它,因此沒(méi)有必要顯式定義它。
spring-boot-starter-actuator:主要提供監(jiān)控、管理和審查應(yīng)用程序的功能。
spring-boot-starter-jdbc:該starter提供對(duì)JDBC操作的支持,包括連接數(shù)據(jù)庫(kù)、操作數(shù)據(jù)庫(kù),以及管理數(shù)據(jù)庫(kù)連接等等。
spring-boot-starter-data-jpa:JPA starter提供使用Java Persistence API(例如Hibernate等)的依賴庫(kù)。
spring-boot-starter-data-*:提供對(duì)MongoDB、Data-Rest或者Solr的支持。
spring-boot-starter-security:提供所有Spring-security的依賴庫(kù)。
spring-boot-starter-test:這個(gè)starter包括了spring-test依賴以及其他測(cè)試框架,例如JUnit和Mockito等等。
spring-boot-starter-web:該starter包括web應(yīng)用程序的依賴庫(kù)。
首先我們要通過(guò)start.spring.io創(chuàng)建一個(gè)圖書目錄管理程序,它會(huì)記錄出版圖書的記錄,包括作者、審閱人、出版社等等。我們將這個(gè)項(xiàng)目命名為BookPub,具體的操作步驟如下:
點(diǎn)擊“Switch to the full version.”,展示完整頁(yè)面;
Group設(shè)置為:org.test;
Artifact設(shè)置為:bookpub;
Name設(shè)置為:BookPub;
Package Name設(shè)置為:org.test.bookpub;
Packaging代表打包方式,我們選jar;
Spring Boot Version選擇最新的1.3.0;
創(chuàng)建Maven工程,當(dāng)然,對(duì)Gradle比較熟悉的同學(xué)可以選擇Gradle工程。
點(diǎn)擊“Generate Project”下載工程包。
利用IDEA導(dǎo)入下載的工程,可以看到pom文件的主體如下如下所示:
com.test ????bookpub ????0.0.1-SNAPSHOT ????jar ???? ????BookPub ????Demo?project?for?Spring?Boot ???????????? ????org.springframework.boot ????????spring-boot-starter-parent ????????1.3.0.RELEASE ????????? ???? ???????? ????UTF-8 ????????1.8 ???????????? ???? ???????????????? ????????org.springframework.boot ????????????spring-boot-starter-data-jpa ???????????????????? ????????org.springframework.boot ????????????spring-boot-starter-jdbc ???????????????????? ????????com.h3database ????????????h3 ????????????runtime ???????????????????? ????org.springframework.boot ????????????spring-boot-starter-test ????????????test ???????????????? ???????????? ???????????????????? ????????org.springframework.boot ????????????????spring-boot-maven-plugin ????????????
在Spring Boot項(xiàng)目中,xxxApplication.java會(huì)作為應(yīng)用程序的入口,負(fù)責(zé)程序啟動(dòng)以及一些基礎(chǔ)性的工作。@SpringBootApplication是這個(gè)注解是該應(yīng)用程序入口的標(biāo)志,然后有熟悉的main函數(shù),通過(guò)SpringApplication.run(xxxApplication.class, args)
來(lái)運(yùn)行Spring Boot應(yīng)用。打開(kāi)SpringBootApplication注解可以發(fā)現(xiàn),它是由其他幾個(gè)類組合而成的:@Configuration(等同于spring中的xml配置文件,使用Java文件做配置可以檢查類型安全)、@EnableAutoConfiguration(自動(dòng)配置,稍后細(xì)講)、@ComponentScan(組件掃描,大家非常熟悉的,可以自動(dòng)發(fā)現(xiàn)和裝配一些Bean)。
我們?cè)趐om文件里可以看到,com.h3database這個(gè)庫(kù)起作用的范圍是runtime,也就是說(shuō),當(dāng)應(yīng)用程序啟動(dòng)時(shí),如果Spring Boot在classpath下檢測(cè)到org.h3.Driver的存在,會(huì)自動(dòng)配置H2數(shù)據(jù)庫(kù)連接?,F(xiàn)在啟動(dòng)應(yīng)用程序來(lái)觀察,以驗(yàn)證我們的想法。打開(kāi)shell,進(jìn)入項(xiàng)目文件夾,利用mvn spring-boot:run
啟動(dòng)應(yīng)用程序,如下圖所示。
[圖片上傳失敗...(image-5c035d-1557557877934)]
可以看到類似Building JPA container EntityManagerFactory for persistence unit 'default、HHH000412: Hibernate Core {4.3.11.Final}、HHH000400: Using dialect: org.hibernate.dialect.H2Dialect這些Info信息;由于我們之前選擇了jdbc和jpa等starters,Spring Boot將自動(dòng)創(chuàng)建JPA容器,并使用Hibernate4.3.11,使用H2Dialect管理H2數(shù)據(jù)庫(kù)(內(nèi)存數(shù)據(jù)庫(kù))。
我們新建一個(gè)StartupRunner類,該類實(shí)現(xiàn)CommandLineRunner接口,這個(gè)接口只有一個(gè)函數(shù):public void run(String... args)
,最重要的是:這個(gè)方法會(huì)在應(yīng)用程序啟動(dòng)后首先被調(diào)用。
在src/main/java/org/test/bookpub/下建立StartRunner類,代碼如下:
package?com.test.bookpub;import?org.slf4j.Logger;import?org.slf4j.LoggerFactory;import?org.springframework.boot.CommandLineRunner;public?class?StartupRunner?implements?CommandLineRunner?{????protected?final?Logger?logger?=?LoggerFactory.getLogger(StartupRunner.class);????@Override ????public?void?run(String...?strings)?throws?Exception?{ ????????logger.info("hello"); ????} }
在BookPubApplication類中創(chuàng)建bean對(duì)象,代碼如下:
@Bean ????public?StartupRunner?schedulerRunner()?{????????return?new?StartupRunner(); ????}
還是用mvn spring-boot:run
命令啟動(dòng)程序,可以看到hello的輸出。對(duì)于那種只需要在應(yīng)用程序啟動(dòng)時(shí)執(zhí)行一次的任務(wù),非常適合利用Command line runners來(lái)完成。Spring Boot應(yīng)用程序在啟動(dòng)后,會(huì)遍歷CommandLineRunner接口的實(shí)例并運(yùn)行它們的run方法。也可以利用@Order注解(或者實(shí)現(xiàn)Order接口)來(lái)規(guī)定所有CommandLineRunner實(shí)例的運(yùn)行順序。
利用command-line runner的這個(gè)特性,再配合依賴注入,可以在應(yīng)用程序啟動(dòng)時(shí)后首先引入一些依賴bean,例如data source、rpc服務(wù)或者其他模塊等等,這些對(duì)象的初始化可以放在run方法中。不過(guò),需要注意的是,在run方法中執(zhí)行初始化動(dòng)作的時(shí)候一旦遇到任何異常,都會(huì)使得應(yīng)用程序停止運(yùn)行,因此最好利用try/catch語(yǔ)句處理可能遇到的異常。
最后給你們推薦一個(gè)群,如果你還想提升自己
歡迎加入Java技術(shù)交流群:659270626
本群提供免費(fèi)的學(xué)習(xí)指導(dǎo) 提供Spring源碼、MyBatis、Netty、Redis,Kafka、Mysql、Zookeeper、Tomcat、Docker、Dubbo、Nginx、分布式、高并發(fā)、性能調(diào)優(yōu)、等架構(gòu)技術(shù)架構(gòu)資料 以及免費(fèi)的解答
不懂的問(wèn)題都可以在本群提出來(lái) 之后還會(huì)有職業(yè)生涯規(guī)劃以及面試指導(dǎo)?
創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國(guó)云服務(wù)器,動(dòng)態(tài)BGP最優(yōu)骨干路由自動(dòng)選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機(jī)房獨(dú)有T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確進(jìn)行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動(dòng)現(xiàn)已開(kāi)啟,新人活動(dòng)云服務(wù)器買多久送多久。