約定大於配置,就是說系統,類庫,框架應該假定合理的默認值,而非要求提供不必要的配置。在使用spring和springmvc的時候,會有好多東西需要配置,這樣工作量增加,並且跨平臺部署的時候容易出現問題。由於這些問題,Spring boot應運而生。
SpringBoot最大的特性就是可以把應用打包成一個jar包或war包,直接啟動,不需要另外配置一個 Web Server。 另外,SpringBoot 喜歡把配置都寫到代碼裡,有時候會帶來混亂,一些本可以用xml來完成的配置,可能會變得難讀和凌亂。
他的核心功能:
1、獨立的運行Spring項目。Spring Boot可以以jar包的形式來運行,運行一個Spring Boot項目我們只需要通過java -jar xx.jar類運行。非常方便。
2、內嵌Servlet容器 ,Spring Boot可以內嵌Tomcat,這樣我們無需以war包的形式部署項目。
3、提供starter簡化maven 配置,使用Spring或者SpringMVC我們需要大量的配置依賴,而這些依賴有很多都是固定的,因此他能簡化配置:
4、 自動配置Spring;
5、準生產的應用監控;
6、無代碼生成和xml配置。
7、極大的提高了開發和部署效率。
接下里看下:
就是這個DemoSpringBootApplication.java 類,這是整個項目的入口類,這個類有個@SpringBootApplication 註解,這是整個核心註解,它的目的就是開啟Spring Boot的自動配置。在類上添加一個 @RestController 註解,使之變為一個controller,然後提供一個地址轉換方法,如下:
然後點項目啟動按鈕。大家會想到為什麼項目會運行起來,分析下
入口類和@SpringBootApplication註解
我們新建一個Project系統都會幫我們創建一個名為artifactId+Application的入口類,這個類中有一個main方法,這個main方法就是一個標準的Java應用程序的入口方法。這裡的@SpringBootApplication則是一個組合註解,源碼:
我們可以看到它組合了@SpringBootConfiguration、@EnableAutoConfiguration以及@ComponentScan,我們在開發的過程中如果不使用@SpringBootApplication,則可以組合使用這三個註解。這三個註解中,@SpringBootConfiguration實際上就是我們前面幾篇博客提到的@Configuration註解,表明這個類是一個配置類,@EnableAutoConfiguration則表示讓Spring Boot根據類路徑中的jar包依賴為當前項目進行自動配置,最後一個@ComponentScan的作用我也不贅述了,唯一要注意的是如果我們使用了@SpringBootApplication註解的話,系統會去入口類的同級包以及下級包中去掃描實體類,因此我們建議入口類的位置在groupId+arctifactID組合的包名下。
關閉特定的自動配置
在上面一小節中我們看到@ComponentScan註解是有一個過濾器的,如果我們只想要@SpringBootApplication去掃描特定的類而不是全部類,那麼就可以關閉自動配置,如下:
SpringBoot的配置文件
Spring Boot使用一個全局的配置文件application.properties或者application.yml,配置文件放在src/main/resources目錄下。properties是我們常見的一種配置文件,Spring Boot不僅支持properties這種類型的配置文件,也支持yaml語言的配置文件,這裡以properties類型的配置文件為例來看幾個案例。
a、修改Tomcat默認端口和默認訪問路徑
如下
server.context-path=/helloboot
server.port=8081
只需要在properties文件中添加。
常規屬性配置
使用Spring容器框架下注入properties文件裡的值是很繁瑣的,這裡就會變得異常簡單。
我們只需要在application.properties中定義屬性,然後在代碼中直接使用@Value注入即可。
如下
book.author=羅貫中
book.name=三國演義
book.pinyin=sanguoyanyi
在這裡設置了中文,因為中文不做特殊處理會亂碼,處理方式為在priperties文件中添加:
server.tomcat.uri-encoding=UTF-8
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true
spring.messages.encoding=UTF-8 然後在變量中通過@Value直接注入就行了,如下:
@Value(value = "${book.author}")
private String bookAuthor;
@Value("${book.name}")
private String bookName;
@Value("${book.pinyin}")
private String bookPinYin;
修改index方法,使之返回這些值:
類型安全配置
剛剛說的這種方式我們在實際項目中使用的時候工作量略大,因為每個項目要注入的變量
的值太多了,這種時候我們可以使用基於類型安全的配置方式,就是將properties屬性和
一個Bean關聯在一起,這樣使用起來會更加方便。我麼來看看這種方式怎麼實現。
1、在.resouses 文件夾中 創建book.properties文件,寫好屬性名和屬性值
2、創建book.bean 並注入properties文件。
prefix是指前綴,location指定要注入文件的位置。
在Controller中添加如下代碼注入Bean:
@Autowiredprivate BookBean bookBean;
日誌配置
默認情況下Spring Boot使用Logback作為日誌框架,也就是我們前面幾篇博客中用到的打
印日誌方式,當然如果有需要我們可以手動配置日誌級別以及日誌輸出位置,相比於我們
在Spring容器中寫的日誌輸出代碼,這裡的配置簡直就是小兒科了,只需要在
application.properties中添加如下代碼:
logging.file=/home/sang/workspace/log.log 日誌輸出位置
logging.level.org.springframework.web=debug 日誌級別
Profile 配置問題
在Spring Boot 中系統提供了更為簡潔的方式。全局Profile配置我們使用application-{profile}.properties來定義,然後在application.properties中通過spring.profiles.active來指定使用哪個Profile。OK,那麼接下來我們來看一個簡單的案例。
1.在src/main/resources文件夾下定義不同環境下的Profile配置文件,文件名分別為application-prod.properties和application-dev.properties,這兩個前者表示生產環境下的配置,後者表示開發環境下的配置,如下:
application-prod.properties:
server.port=8081
1
application-dev.properties:
server.port=8080
1
然後在application.properties中進行簡單配置,如下:
spring.profiles.active=dev
如果想換為生產環境,只需要把spring.profiles.active=dev改為spring.profiles.active=prod即可,當然訪問端口這是也變為8081了。
閱讀更多 java技術情報局 的文章