Spring Boot應用開發(fā)初探與實例講解
Spring Boot是由Pivotal團隊提供的全新Spring開發(fā)框架,其設計目的是用來簡化新Spring應用的初始搭建以及開發(fā)過程。
從它的名字可以看出,Spring Boot 的作用在于創(chuàng)建和啟動新的基于 Spring 框架的項目。
它的目的是幫助開發(fā)人員很容易的創(chuàng)建出獨立運行和產品級別的基于 Spring 框架的應用。
它包含的特性如下:
- 應用獨立運行,對于Web應用直接嵌入應用服務器(Tomcat or Jetty)
- 根據項目的依賴(Maven or Gradle中定義的依賴)自動配置Spring框架的特性
- 提供生產環(huán)境中的監(jiān)控功能——性能、應用狀態(tài)信息等
- 不會生成繁瑣的Java代碼以及XML配置文件
在這節(jié)課中,我們將對Spring Boot的方方面面進行初步的探索,看看Spring Boot究竟能為我們提供怎樣的開發(fā)能力。
環(huán)境準備
- 一個稱手的文本編輯器(例如Vim、Emacs、Sublime Text)或者IDE(Eclipse、Idea Intellij)
- Java環(huán)境(JDK 1.7或以上版本)
- 構建工具Gradle 2.3
使用Gradle作為項目構建工具
首先創(chuàng)建一個項目目錄,在目錄中創(chuàng)建一個Gradle項目描述文件build.gradle:
buildscript {
repositories {
jcenter()
}
dependencies {
classpath "org.springframework.boot:spring-boot-gradle-plugin:1.2.5.RELEASE"
classpath "com.github.adrianbk:gradle-jvmsrc-plugin:0.6.1"
}
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'spring-boot'
apply plugin: 'com.github.adrianbk.jvmsrc'
jvmsrc {
packageName "tmy"
}
jar {
baseName = 'spring-boot-guides'
version = '1.0.0'
}
repositories {
jcenter()
}
dependencies {
compile("org.springframework.boot:spring-boot-starter-web")
}
task wrapper(type: Wrapper) {
gradleVersion = '2.4'
}
在這個文件中,使用到了Spring Boot Gradle插件來幫助我們簡化一些配置工作:
- 提供了Spring Boot框架的依賴定義,在dependencies標簽中直接使用它們即可(不需要聲明版本號)
- 將應用的代碼及所有的依賴打包成一個單獨的jar文件
- 自動搜索main函數(shù)并作為jar文件的啟動函數(shù),jar文件是一個獨立可執(zhí)行的文件
另外由于Gradle的默認特性——例如源代碼放在src/main/java文件夾下,我們引入Gradle JVM Src插件,通過配置:
apply plugin: 'com.github.adrianbk.jvmsrc'
jvmsrc {
packageName "tmy"
}
并運行gradle createJvmSrcDirs,src/main/java/tmy等目錄就被創(chuàng)建出來,省去我們手動創(chuàng)建的麻煩。
Spring Boot能做什么
Spring Boot本身并沒有在Spring框架的基礎上擴展新功能,它僅僅是提供了一種更加快速構建Spring應用的方式。Spring Boot會在根據類路徑上的依賴(也就是Maven或Gradle中定義的依賴)來自動完成配置。例如:
- 使用Spring MVC開發(fā)Web應用,一般需要配置各類Bean(無論是XML還是Java Config),例如DispacherServlet。當Spring Boot應用啟動后,如果spring-webmvc依賴在類路徑上,Spring Boot會自動把這些配置全部自動添加,并且不生成任何代碼。傳統(tǒng)的Spring MVC應用運行時還需要Servlet容器,Spring Boot會內嵌一個Tomcat或Jetty來運行應用,這同樣也不需要開發(fā)者進行任何配置。
- 如果不想使用Tomcat,而是換成Jetty?沒問題,在build.gradle中去掉Tomcat的依賴(默認配置),換成Jetty應用服務器的依賴,除此之外應用代碼不需要進行任何改變。
- 模板引擎Thymeleaf也同樣被Spring Boot支持自動發(fā)現(xiàn),以往瑣碎的配置如今也變成了1-2行Gradle依賴配置。
提示
Spring Boot不會生成或者修改你的源代碼,它僅僅是在應用啟動時根據類路徑以及應用配置動態(tài)的改變Spring應用上下文的配置
簡單的Web應用
現(xiàn)在我們創(chuàng)建一個最簡單的Web應用:
src/main/java/tmy/Application.java
package tmy;
import java.util.Arrays;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestMapping;
@RestController
@SpringBootApplication
public class Application {
@RequestMapping("/")
public String index() {
return "Greetings from Spring Boot!";
}
public static void main(String[] args) {
ApplicationContext ctx = SpringApplication.run(Application.class, args);
System.out.println("Let's inspect the beans provided by Spring Boot:");
String[] beanNames = ctx.getBeanDefinitionNames();
Arrays.sort(beanNames);
for (String beanName : beanNames) {
System.out.println(beanName);
}
}
}
@SpringBootApplication是Spring Boot提供的注解,他相當于加上如下注解:
- @Configuration,表明Application是一個Spring的配置對象,用于配置Spring應用上下文。
- @EnableAutoConfiguration,Spring Boot會根據類路徑(classpath)以及一些屬性值來自動完成一些配置行為,例如:開發(fā)基于Spring MVC的Web應用,需要在配置中加上@EnableWebMvc直接來激活一些默認的Web配置,一旦Spring Boot發(fā)現(xiàn)運行時類路徑上包含了 spring-webmvc 依賴,它會自動的完成一個Web應用的基本配置——例如配置DispatcherServlet等等。
- @ComponenScan告知Spring應用從什么位置去發(fā)現(xiàn)Spring構件(@Component, @Service, @Configuration)等等
運行Web應用
完成上述配置后,運行應用有兩種方法:
- 在IDE中直接運行main方法
- 通過Gradle打包應用:gradle build,運行:java -jar build/libs/${appname}-{version}.jar
在控制臺的輸出中會發(fā)現(xiàn)如下信息:
Let's inspect the beans provided by Spring Boot: application beanNameHandlerMapping defaultServletHandlerMapping dispatcherServlet embeddedServletContainerCustomizerBeanPostProcessor handlerExceptionResolver helloController httpRequestHandlerAdapter messageSource mvcContentNegotiationManager mvcConversionService mvcValidator org.springframework.boot.autoconfigure.MessageSourceAutoConfiguration org.springframework.boot.autoconfigure.PropertyPlaceholderAutoConfiguration org.springframework.boot.autoconfigure.web.EmbeddedServletContainerAutoConfiguration org.springframework.boot.autoconfigure.web.EmbeddedServletContainerAutoConfiguration$DispatcherServletConfiguration org.springframework.boot.autoconfigure.web.EmbeddedServletContainerAutoConfiguration$EmbeddedTomcat org.springframework.boot.autoconfigure.web.ServerPropertiesAutoConfiguration org.springframework.boot.context.embedded.properties.ServerProperties org.springframework.context.annotation.ConfigurationClassPostProcessor.enhancedConfigurationProcessor org.springframework.context.annotation.ConfigurationClassPostProcessor.importAwareProcessor org.springframework.context.annotation.internalAutowiredAnnotationProcessor org.springframework.context.annotation.internalCommonAnnotationProcessor org.springframework.context.annotation.internalConfigurationAnnotationProcessor org.springframework.context.annotation.internalRequiredAnnotationProcessor org.springframework.web.servlet.config.annotation.DelegatingWebMvcConfiguration propertySourcesBinder propertySourcesPlaceholderConfigurer requestMappingHandlerAdapter requestMappingHandlerMapping resourceHandlerMapping simpleControllerHandlerAdapter tomcatEmbeddedServletContainerFactory viewControllerHandlerMapping
這就是Spring應用上下文中的所有Bean信息,其中有Spring MVC中需要用到的dispatcherServlet, mvcConversionService, mvcValidator等等悉數(shù)在列,而我們并沒有進行任何的配置,這也就是Spring Boot完成的工作。
訪問瀏覽器或者使用curl:
$ curl localhost:8080 Greetings from Spring Boot!
添加生產環(huán)境特性
雖然沒有將應用打成WAR包并放入應用服務器中,但Spring Boot本身是可以應用于生成環(huán)境的。為了能夠獲取生產環(huán)境的應用信息,Spring Boot提供了開箱即用的模塊Actuator:
compile("org.springframework.boot:spring-boot-starter-actuator")
在添加完這個依賴后并啟動應用,會看到多了一些URL Mapping信息:
2015-07-24 12:05:33.440 ... : Mapped "{[/info],methods=[GET],params=[],headers=[],consum...
2015-07-24 12:05:33.441 ... : Mapped "{[/autoconfig],methods=[GET],params=[],headers=[],...
2015-07-24 12:05:33.441 ... : Mapped "{[/mappings],methods=[GET],params=[],headers=[],co...
2015-07-24 12:05:33.442 ... : Mapped "{[/trace],methods=[GET],params=[],headers=[],consu...
2015-07-24 12:05:33.442 ... : Mapped "{[/env/{name:.*}],methods=[GET],params=[],headers=...
2015-07-24 12:05:33.442 ... : Mapped "{[/env],methods=[GET],params=[],headers=[],consume...
2015-07-24 12:05:33.443 ... : Mapped "{[/configprops],methods=[GET],params=[],headers=[]...
2015-07-24 12:05:33.443 ... : Mapped "{[/metrics/{name:.*}],methods=[GET],params=[],head...
2015-07-24 12:05:33.443 ... : Mapped "{[/metrics],methods=[GET],params=[],headers=[],con...
2015-07-24 12:05:33.444 ... : Mapped "{[/health],methods=[GET],params=[],headers=[],cons...
2015-07-24 12:05:33.444 ... : Mapped "{[/dump],methods=[GET],params=[],headers=[],consum...
2015-07-24 12:05:33.445 ... : Mapped "{[/beans],methods=[GET],params=[],headers=[],consu...
通過這些URL我們可以獲知Spring應用的運行時信息,例如:
$ curl localhost:8080/health
{"status":"UP"}
Spring Boot Starters
為了能夠快速開發(fā)各類型的應用以及支持種類繁多的第三方庫,Spring Boot提供了大量的starter依賴,引入這些依賴后應用即擁有開箱即用的配置,舉例:
compile("org.springframework.boot:spring-boot-starter-thymeleaf")
那么只需要將模板文件放入src/main/resources/templates目錄下,即可以正常的編寫Spring MVC的Web頁面了。
總結
Spring 框架作為目前非常流行的一個 Java 應用開發(fā)框架,它所包含的內容是非常繁多的。
Spring 框架包含幾十個不同的子項目,涵蓋應用開發(fā)的不同方面。要在這些子項目之間進行選擇,并快速搭建一個可以運行的應用是比較困難的事情。Spring Boot 的目的在于快速創(chuàng)建可以獨立運行的 Spring 應用。
通過 Spring Boot 可以根據相應的模板快速創(chuàng)建應用并運行。Spring Boot 可以自動配置 Spring 的各種組件,并不依賴代碼生成和 XML 配置文件。Spring Boot 可以大大提升使用 Spring 框架時的開發(fā)效率。
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
教你通過B+Tree平衡多叉樹理解InnoDB引擎的聚集和非聚集索引
大家都知道B+Tree是從二叉樹演化而來,在這之前我們來先了解二叉樹、平衡二叉樹、平衡多叉樹,這篇文章主要介紹了通過B+Tree平衡多叉樹理解InnoDB引擎的聚集和非聚集索引,需要的朋友可以參考下2022-01-01
Spring Cloud Gateway全局異常處理的方法詳解
這篇文章主要給大家介紹了關于Spring Cloud Gateway全局異常處理的相關資料,需要的朋友可以參考下2018-10-10
Java中循環(huán)冗余校驗(CRC32)的實現(xiàn)
CRC校驗實用程序庫在數(shù)據存儲和數(shù)據通訊領域,為了保證數(shù)據的正確,就不得不采用檢錯的手段,下面這篇文章主要給大家介紹了關于Java中循環(huán)冗余校驗(CRC32)實現(xiàn)的相關資料,需要的朋友可以參考借鑒,下面來一起看看吧。2017-10-10
java9新特性Reactive?Stream響應式編程?API
這篇文章主要為大家介紹了java9新特性響應式編程API的特點詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-03-03
簡述Java中進程與線程的關系_動力節(jié)點Java學院整理
在 Java 語言中,對進程和線程的封裝,分別提供了 Process 和 Thread 相關的一些類。本文首先簡單的介紹如何使用這些類來創(chuàng)建進程和線程2017-05-05
解決java maven項目找不到jconsole-1.8.0.jar和tools-1.8.0.jar包問題
這篇文章主要介紹了解決java maven項目找不到jconsole-1.8.0.jar和tools-1.8.0.jar包問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08

