Spring Boot 1 -構建應用實踐
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow
也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!
Spring 框架作為目前非常流行的一個 Java 應用開發框架,它所包含的內容是非常繁多的。Spring 框架包含幾十個不同的子專案,涵蓋應用開發的不同方面。要在這些子專案之間進行選擇,並快速搭建一個可以執行的應用是比較困難的事情。Spring Boot 的目的在於快速建立可以獨立執行的 Spring 應用。通過 Spring Boot 可以根據相應的模板快速建立應用並執行。Spring Boot 可以自動配置 Spring 的各種元件,並不依賴程式碼生成和 XML 配置檔案。Spring Boot 可以大大提升使用 Spring 框架時的開發效率。
官方文件:http://docs.spring.io/spring-boot/docs/current/reference/html/
Spring Boot提供了一個強大的一鍵式Spring的整合開發環境,能夠單獨進行一個Spring應用的開發,其中:
(1)集中式配置(application.properties)+註解,大大簡化了開發流程
(2)內嵌的Tomcat和Jetty容器,可直接打成jar包啟動,無需提供Java war包以及繁瑣的Web配置
(3)提供了Spring各個外掛的基於Maven的pom模板配置,開箱即用,便利無比。
(4)可以在任何你想自動化配置的地方,實現可能
(5)提供更多的企業級開發特性,如何系統監控,健康診斷,許可權控制
(6) 無冗餘程式碼生成和XML強制配置
(7)提供支援強大的Restfult風格的編碼,非常簡潔
1、安裝
- 一個稱手的文字編輯器(例如Vim、Emacs、Sublime Text)或者IDE(Eclipse、Idea Intellij)
- Java環境(JDK 1.7或以上版本)
- Maven 3.0+(Eclipse和Idea IntelliJ內建,如果使用IDE並且不使用命令列工具可以不安裝)
Eclipse外掛安裝
1) 外掛安裝
點選選單 Help -> Install new software 進行外掛安裝
外掛地址 http://m2eclipse.sonatype.org/sites/m2e
如果你已經成功安裝了這個外掛,當你開啟Window→ Preferences...的時候,你應該能夠在一個選項列表中看到一個Maven選項
安裝好m2eclipse外掛後,要作兩個設定 a) 禁用Downloadrepository index updates on startup(即取消這個選項的勾選,第三個第四個可以點上),如下圖
b) 設定maven的setting.xml檔案路徑,如下圖
2、建立應用
使用Spring Boot框架可以大大加速Web應用的開發過程,首先在Maven專案依賴中引入spring-boot-starter-web
:
我們在Eclipse 建立maven專案:
填寫GroupId和artifactId
後生成:
import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;@SpringBootApplication@RestControllerpublic class Application { @RequestMapping("/") public String greeting() { return "Hello World!"; } public static void main(String[] args) { SpringApplication.run(Application.class, args); }}
在IDE中直接直接執行main方法,然後訪問http://localhost:8080即可。
另外可以使用maven打包為可執行jar包,然後執行java -jar xxx.jar。
或者執行mvn spring-boot:run執行專案。
在瀏覽器中訪問http://localhost:8080/,Hello World!就出現在了頁面中。只用了區區十幾行Java程式碼,一個Hello World應用就可以正確執行.
3、spring boot專案結構
3.1、pom.xml檔案
pom.xml檔案就是專案依賴檔案,maven根據pom.xml自動載入相應的依賴<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>guisu</groupId> <artifactId>guisu-demo</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>guisu</name> <description>Demo project for Spring WebMvc</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.2.5.RELEASE</version> <relativePath/> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build></project>
在Maven依賴中引入了spring-boot-starter-web
,它包含了Spring Boot預定義的一些Web開發的常用依賴:
spring-web
,spring-webmvc
Spring WebMvc框架tomcat-embed-*
內嵌Tomcat容器jackson
處理json資料spring-*
Spring框架spring-boot-autoconfigure
Spring Boot提供的自動配置功能
“org.springframework.boot:spring-boot-starter-web”是 Spring Boot 所提供的推薦的基礎 POM 檔案之一,用來提供建立基於 Spring MVC 的 Web 應用所需的第三方庫依賴。除了這個 POM 檔案之外,Spring Boot 還提供了其他類似的 POM 檔案。所有這些基礎 POM 依賴都在“org.springframework.boot”組中。一些重要 POM 檔案的具體說明見:
Spring Boot 推薦的基礎 POM 檔案
名稱 | 說明 |
---|---|
spring-boot-starter | 核心 POM,包含自動配置支援、日誌庫和對 YAML 配置檔案的支援。 |
spring-boot-starter-amqp | 通過 spring-rabbit 支援 AMQP。 |
spring-boot-starter-aop | 包含 spring-aop 和 AspectJ 來支援面向切面程式設計(AOP)。 |
spring-boot-starter-batch | 支援 Spring Batch,包含 HSQLDB。 |
spring-boot-starter-data-jpa | 包含 spring-data-jpa、spring-orm 和 Hibernate 來支援 JPA。 |
spring-boot-starter-data-mongodb | 包含 spring-data-mongodb 來支援 MongoDB。 |
spring-boot-starter-data-rest | 通過 spring-data-rest-webmvc 支援以 REST 方式暴露 Spring Data 倉庫。 |
spring-boot-starter-jdbc | 支援使用 JDBC 訪問資料庫。 |
spring-boot-starter-security | 包含 spring-security。 |
spring-boot-starter-test | 包含常用的測試所需的依賴,如 JUnit、Hamcrest、Mockito 和 spring-test 等。 |
spring-boot-starter-velocity | 支援使用 Velocity 作為模板引擎。 |
spring-boot-starter-web | 支援 Web 應用開發,包含 Tomcat 和 spring-mvc。 |
spring-boot-starter-websocket | 支援使用 Tomcat 開發 WebSocket 應用。 |
spring-boot-starter-ws | 支援 Spring Web Services。 |
spring-boot-starter-actuator | 新增適用於生產環境的功能,如效能指標和監測等功能。 |
spring-boot-starter-remote-shell | 新增遠端 SSH 支援。 |
spring-boot-starter-jetty | 使用 Jetty 而不是預設的 Tomcat 作為應用伺服器。 |
spring-boot-starter-log4j | 新增 Log4j 的支援。 |
spring-boot-starter-logging | 使用 Spring Boot 預設的日誌框架 Logback。 |
spring-boot-starter-tomcat | 使用 Spring Boot 預設的 Tomcat 作為應用伺服器。 |
所有這些 POM 依賴的好處在於為開發 Spring 應用提供了一個良好的基礎。Spring Boot 所選擇的第三方庫是經過考慮的,是比較適合產品開發的選擇。但是 Spring Boot 也提供了不同的選項,比如日誌框架可以用 Logback 或 Log4j,應用伺服器可以用 Tomcat 或 Jetty。
3.2 java程式碼
建立src/main/java/Application.java
:
import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;@SpringBootApplication@RestControllerpublic class Application { @RequestMapping("/") public String greeting() { return "Hello World!"; } public static void main(String[] args) { SpringApplication.run(Application.class, args); }}
類似如下結構:
com +- example +- myproject +- Application.java | +- domain //<span style="color: rgb(51, 51, 51); font-family: Helvetica, Tahoma, Arial, sans-serif; font-size: 14px; line-height: 24px; background-color: rgb(245, 245, 245);">用來管理javaBean實體物件</span> | +- Customer.java | +- CustomerRepository.java | +- service //業務邏輯層,處理資料邏輯,驗證資料 | +- CustomerService.java | +- web //Controller控制器 +- CustomerController.java
Spring Boot建議將我們main
方法所在的這個主要的配置類配置在根包名下。
執行應用後,那麼這段程式碼究竟做了什麼呢?我們從程式的入口SpringApplication.run(Application.class, args);
開始分析:
Java程式碼中沒有任何配置,和傳統的Spring應用相比,多了兩個我們不認識的符號:
@EnableAutoConfiguration
@SpringApplication
它們都是由Spring Boot框架提供。在SpringApplication.run()
方法執行後,Spring Boot的autoconfigure
發現這是一個Web應用(根據類路徑上的依賴確定),於是在內嵌的Tomcat容器中啟動了一個Spring的應用上下文,並且監聽預設的tcp埠8080(預設約定)。同時在Spring Context中根據預設的約定配置了Spring WebMvc:
- Servlet容器預設的Context路徑是
/
DispatherServlet
匹配的路徑(servlet-mapping
中的url-patterns
)是/*
@ComponentScan
路徑被預設設定為SampleController
的同名package,也就是該package下的所有@Controller
,@Service
,@Component
,@Repository
都會被例項化後並加入Spring Context中。
沒有一行配置程式碼、也沒有web.xml
。基於Spring Boot的應用在大多數情況下都不需要我們去顯式地宣告各類配置,而是將最常用的預設配置作為約定,在不宣告的情況下也能適應大多數的開發場景。
SpringApplication
是Spring Boot框架中描述Spring應用的類,它的run()
方法會建立一個Spring應用上下文(Application Context)。另一方面它會掃描當前應用類路徑上的依賴,例如本例中發現spring-webmvc
(由spring-boot-starter-web
傳遞引入)在類路徑中,那麼Spring Boot會判斷這是一個Web應用,並啟動一個內嵌的Servlet容器(預設是Tomcat)用於處理HTTP請求。
Spring WebMvc框架會將Servlet容器裡收到的HTTP請求根據路徑分發給對應的
@Controller
類進行處理,@RestController
是一類特殊的@Controller
,它的返回值直接作為HTTP Response的Body部分返回給瀏覽器。@RestController註解是@Controller和@ResponseBody的合集,表示這是個控制器bean,並且是將函式的返回值直接填入HTTP響應體中,是REST風格的控制器。@RequestMapping("/books")表示該控制器處理所有“/books”的URL請求,具體由那個函式處理,要根據HTTP的方法來區分:GET表示查詢、POST表示提交、PUT表示更新、DELETE表示刪除。@RequestMapping
註解表明該方法處理那些URL對應的HTTP請求,也就是我們常說的URL路由(routing),請求的分發工作是有Spring完成的。例如上面的程式碼中http://localhost:8080/
根路徑就被路由至greeting()
方法進行處理。如果訪問http://localhost:8080/hello
,則會出現404 Not Found
錯誤,因為我們並沒有編寫任何方法來處理/hello
請求。
4. 啟動專案SpringApplication.run
啟動Spring Boot專案最簡單的方法就是執行下面的方法:
SpringApplication.run(Application.class, args);
該方法返回一個ApplicationContext物件,使用註解的時候返回的具體型別是AnnotationConfigApplicationContext或AnnotationConfigEmbeddedWebApplicationContext,當支援web的時候是第二個。
除了上面這種方法外,還可以用下面的方法:
SpringApplication application = new SpringApplication(Application.class);application.run(args);
SpringApplication
包含了一些其他可以配置的方法,如果你想做一些配置,可以用這種方式。
除了上面這種直接的方法外,還可以使用SpringApplicationBuilder
:
new SpringApplicationBuilder() .showBanner(false) .sources(Application.class) .run(args);
當使用SpringMVC的時候由於需要使用子容器,就需要用到SpringApplicationBuilder
,該類有一個child(xxx...)
方法可以新增子容器。
3.3 java程式碼主要註解
因為預設和包有關的註解,預設包名都是當前類所在的包,例如@ComponentScan, @EntityScan, @SpringBootApplication
註解。
@RestController
因為我們例子是寫一個web應用,因此寫的這個註解,這個註解相當於同時新增@Controller
和@ResponseBody
註解。
@EnableAutoConfiguration
Spring Boot建議只有一個帶有該註解的類。
@EnableAutoConfiguration
作用:Spring Boot會自動根據你jar包的依賴來自動配置專案。例如當你專案下面有HSQLDB
的依賴時,Spring Boot會建立預設的記憶體資料庫的資料來源DataSource
,如果你自己建立了DataSource
,Spring Boot就不會建立預設的DataSource
。
如果你不想讓Spring Boot自動建立,你可以配置註解的exclude
屬性,例如:
@Configuration@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})public class MyConfiguration {}
@SpringBootApplication
由於大量專案都會在主要的配置類上新增@Configuration,@EnableAutoConfiguration,@ComponentScan
三個註解。
因此Spring Boot提供了@SpringBootApplication
註解,該註解可以替代上面三個註解(使用Spring註解繼承實現)。
注意:Spring Boot會自動掃描@SpringBootApplication所在類的同級包,以及下級包裡的所有BEAN,所以建議入口類放在最外層的包名下。
@RequestMapping
註解表明該方法處理那些URL對應的HTTP請求,也就是我們常說的URL路由(routing),請求的分發工作是有Spring完成的。例如上面的程式碼中http://localhost:8080/
根路徑就被路由至greeting()
方法進行處理。如果訪問http://localhost:8080/hello
,則會出現404 Not Found
錯誤,因為我們並沒有編寫任何方法來處理/hello
請求。
3.4 專案配置
Spring Boot最大的特色是“約定優先配置”,大量的預設配置對開發者十分的友好。但是在實際的應用開發過程中,預設配置不可能滿足所有場景,同時使用者也需要配置一些必須的配置項——例如資料庫連線資訊。Spring Boot的配置系統能夠讓開發者快速的覆蓋預設約定,同時支援Properties配置檔案和YAML配置檔案兩種格式,預設情況下Spring Boot載入類路徑上的application.properties
或application.yml
檔案,例如:
spring.datasource.url=jdbc:mysql://localhost/testspring.datasource.username=dbuserspring.datasource.password=dbpassspring.datasource.driver-class-name=com.mysql.jdbc.Driver
YAML格式更加簡潔: