筆者最近在學習Spring Boot的參考指南,很興奮!由於Spring Boot中有太多的亮點值得點讚了,筆者認爲,當你從無到有,經歷過全部的痛點或迷茫以後,忽然有一個「神器」幫你解決了以前的困惑時,你對這個「神器」纔會有更深入的感悟及印象。html
簡單介紹下Sring Boot:Spring Boot使開發獨立的, 產品級別的基於Spring的應用變得很是簡單, 你只需"just run"。 咱們爲Spring平臺及第三方庫提供開箱即用的設置, 這樣你就能夠有條不紊地開始。多數Spring Boot應用須要不多的Spring配置。java
很明顯,Spring Boot能夠很方便地幫你構建基於Spring開發的應用!web
Spring Boot的主要目標是:spring
Spring Boot建議使用JDK1.6或更高的版本,但儘管Spring Boot兼容Java 1.6, 若是可能的話, 你應該考慮使用Java最新版本。指南中建議使用JDK8,可見其前衛性呀。瀏覽器
一般推薦使用者使用一個支持依賴管理的構建工具( 好比Maven或Gradle),Spring Boot對這兩種構建工具進行了完美的結合。安全
因爲筆者主要是進行的Web開發,而且使用Maven已久,所以重點記錄Spring Boot + Maven的應用。Maven須要3.2或更高的版本。服務器
Spring Boot不會破壞Maven已有的規則,相反Spring Boot會根據Maven的最佳實踐,給出更方便的配置與操做。app
在pom.xml中添加以下配置便可:less
<!-- Inherit defaults from Spring Boot --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.3.0.BUILD-SNAPSHOT</version> </parent>
Spring Boot提供不少"Starter POMs", 這可以讓你輕鬆的將jars添加到你的classpath下。maven
程序已經在POM的partent節點使用了spring-boot-starter-parent。spring-boot-starter-parent是一個特殊的starter,它提供了有用的Maven默認設置,例如項目默認是基於UTF8的編碼,編譯環境默認爲JDK1.6等等。同時,它也提供了一個dependency-management節點, 這樣對於「blessed」依賴你能夠省略version標記。
固然你可能並不須要spring-boot-starter-parent,後續會有「Spring Boot without the parent POM」的辦法。
固然我須要構建一個Spring MVC項目,單單上面的配置是不夠的,還須要另外一個「Starter POM」,只需在pom.xml中添加依賴便可:
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>
這個spring-boot-starter-web會把開發Spring MVC應用所可能用到的依賴自動地幫你加載進來。能夠經過mvn dependency:tree命令查看。
添加一個Spring Boot的Maven插件,它能夠提供更多的Maven功能。
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
這個插件既可使咱們應用mvn spring-boot:run命令來運行程序,也能夠幫咱們二次打包應用爲可運行的jar包!Java沒有提供任何標準的加載內嵌jar文件(即jar文件中還包含jar文件)的方法,Spring Boot採起一個不一樣的途徑,並容許你真正的內嵌jars。
固然要使用插件二次打包這個特性,須要綁定repackage目標的 <executions> 配置。若是你不使用parent POM, 你將須要本身聲明該配置。具體可參見插件文檔。
最後,若是你使用的Spring Boot不是release版本,可能須要在pom.xml中添加如下配置:
<!-- (you don't need this if you are using a .RELEASE version) --> <repositories> <repository> <id>spring-snapshots</id> <url>http://repo.spring.io/snapshot</url> <snapshots><enabled>true</enabled></snapshots> </repository> <repository> <id>spring-milestones</id> <url>http://repo.spring.io/milestone</url> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>spring-snapshots</id> <url>http://repo.spring.io/snapshot</url> </pluginRepository> <pluginRepository> <id>spring-milestones</id> <url>http://repo.spring.io/milestone</url> </pluginRepository> </pluginRepositories>
上述的項目pom.xml配置完成後,寫一個簡單的SpringMVC的示例。
首先創建一個DemoController。
@RestController public class DemoController { @RequestMapping("/demo") String home() { return "Hello World!"; } }
而後創建一個項目的啓動類,同時「兼職」Spring的Java配置類。
@Configuration @EnableAutoConfiguration @ComponentScan public class Application { public static void main(String[] args) throws Exception { SpringApplication.run(Application.class, args); } }
要項目跑起來有經常使用的兩種方式:
**ps:**在項目的target目錄下,xxx.jar.original是Maven打包的原始jar包,xxx.jar是插件的二次打包。
項目跑起來後,瀏覽器地址欄輸入"localhost:8080/demo",驗證"Hello World!"結果。
到此你可能會疑惑,Spring MVC項目裏爲何會有main函數?沒有Servlet容器,項目是怎麼運行起來的呢?
main函數能夠暫時先理解爲Spring Boot應用(基於Spring Boot構建的應用)的獨特運行方式。
Spring Boot打出的jar包之因此有單獨運行的能力,並非脫離了Servlet容器,而是將內嵌的Servlet容器一塊兒打包了!這歸功於上面的spring-boot-starter-web依賴。Sring Boot對多種內嵌容器進行了支持,只須要配置相關的starter依賴便可。
**ps:**查看文檔能夠看出,Spring Boot對Servlet容器的支持,Servlet版本均在3.0以上,須要使用者多瞭解Servlet3.0的機制。傳送門
將應用打包成jar運行,一個好處是你能夠像Java SE那樣來運行程序;更有利的一點是,可執行jars可用於生產部署。因爲它們是自包含的,很是適合基於雲的部署。