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參考指南