spring boot(1)入門

1 簡介

       Spring Boot是由Pivotal團隊提供的全新框架,其設計目的是用來簡化新Spring應用的初始搭建以及開發過程。該框架使用了特定的方式來進行配置,從而使開發人員再也不須要定義樣板化的配置。經過這種方式,Spring Boot致力於在蓬勃發展的快速應用開發領域(rapid application development)成爲領導者。java

       Spring Boot具備以下特性:web

  • 簡化maven配置,快速建立獨立的spring應用程序。
  • 開箱即用,沒有代碼生成,也無需XML配置。同時也能夠修改默認值來知足特定的需求。
  • 提供了一些大型項目中常見的非功能性特性,如嵌入式服務器、安全、指標,健康檢測、外部配置等。
  • Spring Boot並非不對Spring功能上的加強,而是提供了一種快速使用Spring的方式。

2 快速入門

    本博客Spring Boot使用版本1.5.8.RELEASE,Spring Boot 1.5.8.RELEASE須要Java 7和Spring Framework 4.3.12.RELEASE或更高版本,你也可使用Spring Boot with Java 6和一些額外的配置(不建議),使用Maven(3.2+)或Gradle 2(2.9或更高版本)和3來構建。spring

      本博客系列統一使用Java 1.8,Spring Boot 1.5.8.RELEASE以及Maven3.2.5版本。apache

      一個簡單的spring boot項目結構以下:json

  • pom.xml:Maven構建說明文件。
  • DemoApplication.java:一個帶有main()方法的類,用於啓動應用程序(關鍵)。
  • application.properties:一個空的properties文件,你能夠根據須要添加配置屬性。

2.1 建立項目步驟

      一、首先建立一個通常的Maven項目,有一個pom.xml和基本的src/main/java結構。api

      二、修改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>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>demo</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.8.RELEASE</version>
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

      spring boot父級依賴>安全

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.8.RELEASE</version>
</parent>

      這塊配置就是Spring Boot父級依賴,有了這個,當前的項目就是Spring Boot項目了,spring-boot-starter-parent是一個特殊的starter,它用來提供相關的Maven默認依賴,使用它以後,經常使用的包依賴能夠省去version標籤。服務器

      若是你不想使用某個依賴默認的版本,您還能夠經過覆蓋本身的項目中的屬性來覆蓋各個依賴項,例如,要升級到另外一個Spring Data版本系列,您能夠將如下內容添加到pom.xml中。mvc

<properties>
    <spring-data-releasetrain.version>Fowler-SR2</spring-data-releasetrain.version>
</properties>

      本來默認版本是Ingalls-RELEASE的,如今就使用Fowler-SR2版本了。

      並非每一個人都喜歡繼承自spring-boot-starter-parent POM。您可能有您須要使用的本身的公司標準parent,或者您可能更喜歡顯式聲明全部的Maven配置。若是你不想使用spring-boot-starter-parent,您仍然能夠經過使用scope = import依賴關係來保持依賴關係管理:

<dependencyManagement>
     <dependencies>
        <dependency>
            <!-- Import dependency management from Spring Boot -->
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>1.5.1.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

      該設置不容許您使用如上所述的屬性(properties)覆蓋各個依賴項,要實現相同的結果,您須要在spring-boot-dependencies項以前的項目的dependencyManagement中添加一個配置,例如,要升級到另外一個Spring Data版本系列,您能夠將如下內容添加到pom.xml中。

<dependencyManagement>
    <dependencies>
        <!-- Override Spring Data release train provided by Spring Boot -->
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-releasetrain</artifactId>
            <version>Fowler-SR2</version>
            <scope>import</scope>
            <type>pom</type>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>1.5.8.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

      起步依賴spring-boot-starter-*>

      Spring Boot提供了不少」開箱即用「的依賴模塊,都是以spring-boot-starter-xx做爲命名的。打個比方來講明一下這個起步依賴的好處,好比組裝臺式機和品牌機,本身組裝的話須要本身去選擇不一樣的零件,最後還要組裝起來,期間有可能會遇到零件不匹配的問題。耗時又消力,而品牌機就好一點,買來就能直接用的,後續想換零件也是能夠的。相比較之下,後者帶來的效果更好點(這裏就不討論價格問題哈),起步依賴就像這裏的品牌機,自動給你封裝好了你想要實現的功能的依賴。就好比咱們以前要實現web功能,引入了spring-boot-starter-web這個起步依賴。

      起步依賴本質上是一個Maven項目對象模型(Project Object Model,POM),定義了對其餘庫的傳遞依賴,這些東西加在一塊兒即支持某項功能。不少起步依賴的命名都暗示了它們提供的某種或者某類功能。

      spring boot maven插件>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

      上面的配置就是Spring Boot Maven插件,Spring Boot Maven插件提供了許多方便的功能:

  • 把項目打包成一個可執行的超級JAR(uber-JAR),包括把應用程序的全部依賴打入JAR文件內,併爲JAR添加一個描述文件,其中的內容能讓你用java -jar來運行應用程序。
  • 搜索public static void main()方法來標記爲可運行類。

      三、應用入口類DemoApplication

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication(scanBasePackages = "com.example")
public class DemoApplication {

	public static void main(String[] args) {
		SpringApplication.run(DemoApplication.class, args);
	}
}

      DemoApplication是一個很關鍵的啓動類,程序的入口就是這裏。@SpringBootApplication是Sprnig Boot項目的核心註解,主要目的是開啓自動配置。main方法這是一個標準的Java應用的main的方法,主要做用是做爲項目啓動的入口。

      四、控制類DemoController

package com.example.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class DemoController {
	@RequestMapping("/hello")
    public String index() {
        return "Hello World";
    }
}

   控制類中添加@RestController以及index方法,@RestController註解等價於@Controller+@ResponseBody的結合,使用這個註解的類裏面的方法都以json格式輸出。

      五、運行

     啓動應用入口類,打開瀏覽器訪問http://localhost:8080/hello, 你就能看到頁面顯示Hello Spring Boot效果了,一個簡單的Web的項目就是如此簡單。

3 單元測試

     打開的src/test/下的測試入口,編寫簡單的http請求來測試;使用mockmvc進行,利用MockMvcResultHandlers.print()打印出執行結果。

@RunWith(SpringRunner.class)
@SpringBootTest
public class HelloTests {

  
    private MockMvc mvc;

    @Before
    public void setUp() throws Exception {
        mvc = MockMvcBuilders.standaloneSetup(new DemoController()).build();
    }

    @Test
    public void getHello() throws Exception {
        mvc.perform(MockMvcRequestBuilders.get("/hello").accept(MediaType.APPLICATION_JSON))
                .andExpect(status().isOk())
                .andExpect(content().string(equalTo("Hello World")));
    }

}

4 開發環境的調試

      熱啓動在正常開發項目中已經很常見了吧,雖然平時開發web項目過程當中,改動項目啓重啓老是報錯;但springBoot對調試支持很好,修改以後能夠實時生效,須要添加如下的配置:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <optional>true</optional>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <fork>true</fork>
            </configuration>
        </plugin>
    </plugins>
</build>
相關文章
相關標籤/搜索