使用spring-boot快速開發spring應用
spring多年以來一直都是java平臺開發web應用的主流技術,在標準的J2EE架構以外提供了一個輕量級的解決方案。雖然spring提供了不少功能,簡化了java平臺的企業應用開發,下降了開發工做量,但相比較其它語言的一些框架(例如ruby on rails,python Django)來講,基於spring 的開發仍然比較複雜,尤爲是新建一個項目時,須要進行各類配置,重複的工做量較大。 java
針對這個問題spring開源社區一直都在持續不斷地進行探索,提供相應的解決方案。 python
grails
使用groovy語言,封裝了spring,提供了一個高效的全棧框架,在開發效率方面可媲美ROR,但運行時性能比ROR要高不少。grails用戶羣較大,目前開發社區比較活躍。
spring roo
在spring之上提供一個純java的封裝,使用到了osgi,aspectj等技術,提供相似ROR的開發模式,但未成功推廣,用戶很少,目前開發基本停滯。
spring-boot
spring-boot 是spring社區今年推出的一個新項目,其主要目的也是提升生產率,尤爲是快速建立和運行一個spring 應用。
spring-boot 功能特性
spring-boot主要功能特性以下:
建立獨立運行的spring應用
使用spring-boot,可將整個spring應用打包爲一個獨立的jar文件,內嵌tomcat或者jetty容器。經過 java -jar xxx.jar 便可運行,免去了部署到應用服務器的步驟。
啓動器
針對典型的應用需求,提供了一些標準的啓動器配置,聲明對這些啓動器的依賴便可得到相關功能。例如若是須要使用jpa進行數據訪問,僅需加入 web
${project.groupId} spring-boot-starter-data-jpa
spring-boot會自動配置經過jpa進行數據訪問須要的bean。
自動配置spring
spring-boot會根據classpath包含的內容自動推測用戶的需求並自動配置。例如若是在classpath包含了hsqldb,而且用戶未配置數據庫鏈接,spring-boot將會配置一個hsqldb內存數據庫和數據源。
自動生成生產環境須要的特性
spring-boot可以爲應用自動加入一些典型的生產環境下的功能特性,例如:外部配置,安全,日誌,管理,審計等。
無代碼生成,無xml配置需求
spring-boot無代碼生成,全部的配置可經過代碼完成(spring 的javaconfig),不須要使用xml(雖然能夠使用)。
spring-boot組件
spring-boot項目分爲幾個不一樣的組件,下面是每一個組件的說明
spring-boot
SpringBootApplication ,提供靜態方法,用於開發獨立運行的應用
嵌入容器配置,tomcat或者jetty
外部配置支持,從命令行,屬性文件讀取配置
spring context 的初始化
spring-boot-autoconfigure
自動配置框架:根據classpath推測用戶須要的功能並自動配置。例如若是在classpath 包含了 HSQLDB,而且沒有配置數據庫鏈接,spring-boot-autoconfig將自動配置一個內存數據庫。spring-boot-autoconfigure使用spring 的javaconfig功能,爲一個 @Configuration 類加上 @Conditional註解,註解聲明的條件知足時,配置就會生效。用戶可編寫本身的配置類對自動配置進行擴展。
spring-boot-starters
一組預約義的依賴,添加不一樣類型的應用功能。例如若是須要jpa數據訪問,加入 spring-boot-starter-data-jpa
spring-boot cli
一個命令行工具,能夠直接運行一個groovy腳本做爲spring 應用。例如如下groovy代碼定義
了一個spring mvc controller,經過運行 spring run HelloController.groovy 便可運行一個spring web 應用。 spring
@Controller class HelloController { @RequestMapping("/") @ResponseBody String home() { return "Hello World!" } }
groovy語言語法很是相似java語言,大部分代碼均可以直接拷貝使用。spring-boot cli提供的功能很是適用於快速原型開發,以及在開發環境中搭建測試/模擬服務器等。(今年一個國人開發的開源項目 moco得到了「 duke選擇獎」,moco的主要功能就是搭建測試/模擬服務器,藉助於spring-boot cli,只須要用java語言,幾分鐘以內也能夠搭建一個測試/模擬服務器)
spring-boot-actuator
提供更多面向生產環境的支持,安全,日誌,管理,審計。
spring-boot-loader
使用java -jar xxx.jar 運行應用的實現,對打包文件格式進行了定義。通常經過gradle插件或者 maven插件使用。這兩個插件提供了在gradle和maven構建系統中使用spring-boot的功能。使用你的IDE建立一個普通的java 項目,加入這兩個插件便可在項目中引入spring-boot。下面是使用java語言開發的controller: sql
package hello; import org.springframework.boot.*; import org.springframework.boot.autoconfigure.*; import org.springframework.stereotype.*; import org.springframework.web.bind.annotation.*; @Controller @EnableAutoConfiguration public class SampleController { @RequestMapping("/") @ResponseBody String home() { return "Hello World!"; } public static void main(String[] args) throws Exception { SpringApplication.run(SampleController.class, args); } }
相比較groovy而言,java語言開發的代碼中須要包含一個 main 靜態執行入口,在其中調用 SpringApplication.run 方法啓動spring 應用。
對於包含上述代碼的項目使用gradle和maven插件,能夠將spring應用打包成爲一個單獨的jar文件,而後使用
java -jar xxxx.jar 執行。 數據庫