Spring Boot

SpringBoot模塊分類:

spring-boot模塊

該模塊提供了一些特性用來支持springboot中其他模塊徒恋,這些特性包含如下:

  • SpringApplication類提供了靜態(tài)方法以便于寫一個獨立了spring應(yīng)用程序潜沦,該類的主要職責(zé)是create和refresh一個合適的Spring 應(yīng)用程序上下文(ApplicationContext)
  • 給web應(yīng)用提供了一個可選的web容器(目前有Tomcat或Jetty)
  • 一流的外部配置的支持(application.properties)
  • 提供了便捷的應(yīng)用程序上下文(ApplicationContext)的初始化器岁钓,以便在ApplicationContext使用前對其進(jìn)行用戶定制。

spring-boot-autoconfigure模塊

springboot可以依據(jù)classpath里面的依賴的內(nèi)容來自動配置bean到IOC容器待诅,但是要開啟這個自動配置功能需要添加@EnableAutoConfiguration注解夷野。Auto-configuration會嘗試推斷哪些beans是用戶可能會需要的入客。比如如果HSQLDB包在當(dāng)前classpath下,并且用戶并沒有配置其他數(shù)據(jù)庫鏈接背桐,這時候Auto-configuration功能會自動注入一個基于內(nèi)存的數(shù)據(jù)庫連接到應(yīng)用的IOC容器。

目前 auto-configuration 提供以下類型的注入:

  • Web (Tomcat or Jetty, Spring MVC):
  • JDBC (Commons DBCP, embedded databases, jdbcTemplate)
    DBCP原理蝉揍、DBCP簡單使用
  • JPA with Hibernate
  • Spring Data JPA (automatically detecting Repository classes)詳解
  • Spring Batch (including JobLauncherCommandLineRunners and database initialization)
  • Thymeleaf templating
  • Reactor asynchronous JVM programming
    auto-configuration的使用:在class上標(biāo)注@Configuration注解實現(xiàn)链峭,并且使用@Configuration的時候一般帶有一定的約束,比如同時還在Class上標(biāo)注了 @ConditionalOnClass(當(dāng)前classpath下存在類) 和@ConditionalOnMissingBean(當(dāng)前IOC容器不存在bean)注解又沾。這保證了classpath下存在一些相關(guān)的類并且需要的bean還沒有被注入到IOC時候auto-configuration才生效弊仪。

spring-boot-starters模塊

Starters是一組可以方便使用的依賴描述,starter里面一般只有一個POM文件杖刷,pom文件里面添加了Spring框架和一些相關(guān)的功能模塊的依賴配置励饵,你需要使用某些功能時候在也不需要到處查找需要的功能都是那些jar包提供的并配置到POM文件了。比如如果你想要使用Spring和JPA作為數(shù)據(jù)庫存取滑燃,你需要引入spring-boot-starter-data-jpa在你的工程即可曲横。

spring-boot-actuator模塊

SpringBoot還提供了許多附加功能,可以幫助我們在應(yīng)用程序部署到生產(chǎn)環(huán)境后對其進(jìn)行監(jiān)控和管理不瓶。springboot提了http禾嫉,jmx,shell等公交來管理和監(jiān)控我們的應(yīng)用程序。另外審計蚊丐,監(jiān)控和性能指標(biāo)的可以自動應(yīng)用到應(yīng)用程序上熙参。

spring-boot-cli模塊

Spring Boot CLI是一個命令行公交用來快速搭建一個spring原型應(yīng)用,并且可以運行Groovy腳本麦备。

spring-boot-loader模塊

Spring Boot Loader模塊允許我們使用java -jar archive.jar運行包含嵌套依賴的jar或者war文件孽椰,
Spring Boot Loader提供了三種類啟動器 (JarLauncher, WarLauncher and
PropertiesLauncher),這些類啟動器的目的一樣都是加載嵌套在jar里面的資源(比如class文件凛篙,配置文件等)黍匾。[Jar|War]Launcher固定去查找當(dāng)前jar的lib目錄里面的嵌套jar文件里面的資源。

正常情況下classloader只能找到j(luò)ar里面文件類里面的*.class文件呛梆,之前都是把嵌套jar里面的class文件和應(yīng)用的class文件打包為一個jar锐涯,這樣就不存在嵌套jar了,但是這樣做就不能很清晰的知道應(yīng)用到底依賴了哪些東西填物,哪些是應(yīng)用自己的纹腌,另外多個jar里面的class可能內(nèi)容不一樣但是文件名卻一樣霎终。為了解決這些問題,SpringBoot提供了一種方式升薯,Springboot中jar文件格式固定如下:

example.jar
 |
 +-META-INF
 |  +-MANIFEST.MF
 +-org
 |  +-springframework
 |     +-boot
 |        +-loader
 |           +-<spring boot loader classes>
 +-com
 |  +-mycompany
 |     + project
 |        +-YouClasses.class
 +-lib
    +-dependency1.jar
    +-dependency2.jar

應(yīng)用依賴的jar固定放到lib目錄莱褒。

該模塊中Launcher用來啟動我們的打包應(yīng)用程序,它主要關(guān)心構(gòu)造一個合適的URLClassLoader加載器用來調(diào)用我們應(yīng)用程序的main方法涎劈。

對應(yīng)jar包广凸,spring-boot-maven-plugin插件會設(shè)置META-INF/MANIFEST.MF中的
Main-Class: org.springframework.boot.loader.JarLauncher
Start-Class: com.mycompany.project.MyApplication

也就是java -jar 方式啟動應(yīng)用實際啟動的是JarLauncher
的main方法,而不是我們的應(yīng)用的MyApplication的里面的main方法蛛枚。后者是在前者中使用一個新建的類加載器LaunchedURLClassLoader啟動的炮障。

Exception example:

2018-03-10 18:25:12,522 ERROR [http-nio-7001-exec-10] - Failed to parse multipart servlet request; nested exception is org.apache.commons.fileupload.FileUploadBase$IOFileUploadException: Processing of multipart/form-data request failed.

/tmp/tomcat.7295276192597167712.7001/work/Tomcat/localhost/ROOT/upload_a42735c4_afc7_4d57_9f61_7ac65ee86d7d_00000000.tmp (沒有那個文件或目錄)
org.springframework.web.multipart.MultipartException: Failed to parse multipart servlet request; nested exception is org.apache.commons.fileupload.FileUploadBas
e$IOFileUploadException: Processing of multipart/form-data request failed. /tmp/tomcat.7295276192597167712.7001/work/Tomcat/localhost/ROOT/upload_a42735c4_afc7_
4d57_9f61_7ac65ee86d7d_00000000.tmp (沒有那個文件或目錄)
原因:spring boot文件上傳,默認(rèn)是在/tmp下創(chuàng)建臨時目錄坤候, 一定時間內(nèi)某些目錄如果沒有被使用胁赢,操作系統(tǒng)會自動清理,造成文件上傳失敗錯誤
解法一
在application.properties中加如下配置項
server.tomcat.basedir=.

解法二
在文件: /usr/lib/tmpfiles.d/tmp.conf添加如下配置
X /tmp/tomcat.*

深入學(xué)習(xí)springboot
SpringBoot多模塊項目實踐
Spring4all
Spring Boot參考指南

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末白筹,一起剝皮案震驚了整個濱河市智末,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌徒河,老刑警劉巖系馆,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異顽照,居然都是意外死亡由蘑,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進(jìn)店門代兵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來尼酿,“玉大人,你說我怎么就攤上這事植影∩亚妫” “怎么了?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵思币,是天一觀的道長鹿响。 經(jīng)常有香客問我,道長谷饿,這世上最難降的妖魔是什么惶我? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮博投,結(jié)果婚禮上绸贡,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好恃轩,可當(dāng)我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著黎做,像睡著了一般叉跛。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蒸殿,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天筷厘,我揣著相機與錄音,去河邊找鬼宏所。 笑死酥艳,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的爬骤。 我是一名探鬼主播充石,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼霞玄!你這毒婦竟也來了骤铃?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤坷剧,失蹤者是張志新(化名)和其女友劉穎惰爬,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體惫企,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡撕瞧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了狞尔。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片丛版。...
    茶點故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖偏序,靈堂內(nèi)的尸體忽然破棺而出硼婿,到底是詐尸還是另有隱情,我是刑警寧澤禽车,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布寇漫,位于F島的核電站,受9級特大地震影響殉摔,放射性物質(zhì)發(fā)生泄漏州胳。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一逸月、第九天 我趴在偏房一處隱蔽的房頂上張望栓撞。 院中可真熱鬧,春花似錦、人聲如沸瓤湘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽弛说。三九已至挽懦,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間木人,已是汗流浹背信柿。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留醒第,地道東北人渔嚷。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像稠曼,于是被迫代替她去往敵國和親形病。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,976評論 2 355

推薦閱讀更多精彩內(nèi)容