1. 程式人生 > >Spring Boot 1 -構建應用實踐

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並且不使用命令列工具可以不安裝)
1. spring-boot是一個mavan專案,所以其使用的jar包全部是通過maven管理,當然,使用maven也是非常方便的。 2. spring-boot打出來的包是一個可執行jar包的狀態,使用的是內建的tomcat伺服器,所以不需要將專案轉成EJB專案。

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-webspring-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的應用在大多數情況下都不需要我們去顯式地宣告各類配置,而是將最常用的預設配置作為約定,在不宣告的情況下也能適應大多數的開發場景。


  1. SpringApplication是Spring Boot框架中描述Spring應用的類,它的run()方法會建立一個Spring應用上下文(Application Context)。另一方面它會掃描當前應用類路徑上的依賴,例如本例中發現spring-webmvc(由 spring-boot-starter-web傳遞引入)在類路徑中,那麼Spring Boot會判斷這是一個Web應用,並啟動一個內嵌的Servlet容器(預設是Tomcat)用於處理HTTP請求。

  1. 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表示刪除。

  2. @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.propertiesapplication.yml檔案,例如:

spring.datasource.url=jdbc:mysql://localhost/testspring.datasource.username=dbuserspring.datasource.password=dbpassspring.datasource.driver-class-name=com.mysql.jdbc.Driver

YAML格式更加簡潔: