Spring Boot乾貨系列:(一)優雅的入門篇 | 掘金技術徵文

本來地址:Spring Boot乾貨系列:(一)優雅的入門篇
博客地址:tengj.top/php

前言

Spring一直是很火的一個開源框架,在過去的一段時間裏,Spring Boot在社區中熱度一直很高,因此決定花時間來了解和學習,爲本身作技術儲備。java

正文

首先聲明,Spring Boot不是一門新技術,因此不用緊張。從本質上來講,Spring Boot就是Spring,它作了那些沒有它你也會去作的Spring Bean配置。它使用「習慣優於配置」(項目中存在大量的配置,此外還內置了一個習慣性的配置,讓你無需手動進行配置)的理念讓你的項目快速運行起來。使用Spring Boot很容易建立一個獨立運行(運行jar,內嵌Servlet容器)、準生產級別的基於Spring框架的項目,使用Spring Boot你能夠不用或者只須要不多的Spring配置。git

Spring Boot精要

Spring將不少魔法帶入了Spring應用程序的開發之中,其中最重要的是如下四個核心。github

  • 自動配置:針對不少Spring應用程序常見的應用功能,Spring Boot能自動提供相關配置
  • 起步依賴:告訴Spring Boot須要什麼功能,它就能引入須要的庫。
  • 命令行界面:這是Spring Boot的可選特性,藉此你只需寫代碼就能完成完整的應用程序,無需傳統項目構建。
  • Actuator:讓你可以深刻運行中的Spring Boot應用程序,一套究竟。

詳細的咱們就不展開,等你愛上後天然會去深刻的瞭解,後續章節咱們會一一展開介紹。接下來讓咱們開搞吧。我已經火燒眉毛的要嚐嚐Spring Boot的味道了。web

系統要求

目前Spring Boot正式版爲1.5.1.RELEASE默認狀況下,Spring Boot 1.5.1.RELEASE須要Java 7和Spring Framework 4.3.6.RELEASE或更高版本,你也可使用Spring Boot with Java 6和一些額外的配置(不建議),使用Maven(3.2+)或Gradle 2(2.9或更高版本)和3來構建。spring

雖然你可使用Java 6或7的Spring Boot,但咱們一般推薦Java 8。apache

因此本博客系列統一使用Java 1.8,Spring Boot 1.5.1.RELEASE以及Maven3.3.9版本。開發工具使用IDEA(強烈推薦,能夠看我另一篇介紹IDEA入門文章,內有官方中文教程:Java人員正確使用 IntelliJ IDEA的方式json

光速入門-開發一個web服務

沒有比較就沒有傷害,讓咱們先看看傳統Spring MVC開發一個簡單的Hello World Web應用程序,你應該作什麼,我能想到一些基本的需求。瀏覽器

  • 一個項目結構,其中有一個包含必要依賴的Maven或者Gradle構建文件,最起碼要有Spring MVC和Servlet API這些依賴。
  • 一個web.xml文件(或者一個WebApplicationInitializer實現),其中聲明瞭Spring的DispatcherServlet。
  • 一個啓動了Spring MVC的Spring配置
  • 一控制器類,以「hello World」相應HTTP請求。
  • 一個用於部署應用程序的Web應用服務器,好比Tomcat。

最讓人難以接受的是,這份清單裏面只有一個東西是和Hello World功能相關的,即控制器,剩下的都是Spring開發的Web應用程序必需的通用模板。springboot

接下來看看Spring Boot如何搞定?
很簡單,我僅僅只須要很是少的幾個配置就能夠迅速方便的搭建起來一套web項目

初始化Spring Boot項目

構建一個Sping Boot的Maven項目,強烈推薦Spring Initializr,它從本質上來講就是一個Web應用程序,它能爲你生成Spring Boot項目結構。
Spring Initializr有幾種用法:

  • 經過Web界面使用

    1. 訪問:http://start.spring.io/
    2. 選擇構建工具Maven Project、Spring Boot版本1.5.1以及一些工程基本信息,可參考下圖所示

    3. 點擊Generate Project下載項目壓縮包

    4. 導入到你的工程,若是是IDEA,則須要:
      a.菜單中選擇File–>New–>Project from Existing Sources...
      b.選擇解壓後的項目文件夾,點擊OK
      c.點擊Import project from external model並選擇Maven,點擊Next到底爲止。
      d.若你的環境有多個版本的JDK,注意到選擇Java SDK的時候請選擇Java 7以上的版本
  • 經過IntelliJ IDEA使用(我的推薦)
    IntelliJ IDEA是很是流行的IDE,IntelliJ IDEA 14.1已經支持Spring Boot了。
    建立Spring Boot操做步驟以下:
    在File菜單裏面選擇 New > Project,而後選擇Spring Initializr,接着以下圖一步步操做便可。

項目結構

根據上面的操做已經初始化了一個Spring Boot的框架了,項目結構以下:

如你所見,項目裏面基本沒有代碼,除了幾個空目錄外,還包含以下幾樣東西。

  • pom.xml:Maven構建說明文件。
  • Chapter1Application.java:一個帶有main()方法的類,用於啓動應用程序(關鍵)。
  • Chapter1ApplicationTests.java:一個空的Junit測試類,它加載了一個使用Spring Boot字典配置功能的Spring應用程序上下文。
  • application.properties:一個空的properties文件,你能夠根據須要添加配置屬性。

解析pom.xml

你們跟我一塊兒移步pom.xml,看看Spring Boot的跟普通Spring MVC工程的Maven配置有啥不同

<?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.dudu</groupId>
    <artifactId>chapter1</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

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

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </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.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>複製代碼

這塊配置就是Spring Boot父級依賴,有了這個,當前的項目就是Spring Boot項目了,spring-boot-starter-parent是一個特殊的starter,它用來提供相關的Maven默認依賴,使用它以後,經常使用的包依賴能夠省去version標籤。關於Spring Boot提供了哪些jar包的依賴,可查看C:\Users\用戶.m2\repository\org\springframework\boot\spring-boot-dependencies\1.5.1.RELEASE\spring-boot-dependencies-1.5.1.RELEASE.pom
這裏我就貼一點點意思意思,以下:

<properties>
        <!-- Dependency versions -->
        <activemq.version>5.14.3</activemq.version>
        <antlr2.version>2.7.7</antlr2.version>
        <appengine-sdk.version>1.9.48</appengine-sdk.version>
        <artemis.version>1.5.2</artemis.version>
        <aspectj.version>1.8.9</aspectj.version>
        <assertj.version>2.6.0</assertj.version>
        <atomikos.version>3.9.3</atomikos.version>
        <bitronix.version>2.1.4</bitronix.version>
        <caffeine.version>2.3.5</caffeine.version>
        <cassandra-driver.version>3.1.3</cassandra-driver.version>
        <classmate.version>1.3.3</classmate.version>
        <commons-beanutils.version>1.9.3</commons-beanutils.version>
        <commons-collections.version>3.2.2</commons-collections.version>
        <spring-data-releasetrain.version>Ingalls-RELEASE</spring-data-releasetrain.version>
        ......
</properties>複製代碼

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

<properties>
    <spring-data-releasetrain.version>Fowler-SR2</spring-data-releasetrain.version>
</properties>複製代碼

本來默認版本是Ingalls-RELEASE的(看上面最後一行有說明 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.1.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>複製代碼

起步依賴 spring-boot-starter-xx

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

嘿嘿嘿,看來依賴了好多呢,若是讓我本身弄估計要調半天,因此Spring Boot經過提供衆多起步依賴下降項目依賴的複雜度。起步依賴本質上是一個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()方法來標記爲可運行類。

應用入口類

Chapter1Application是一個很關鍵的啓動類,程序的入口就是這裏,爲了演示簡單,咱們再也不新建控制類,而是直接在這個入口類中編寫,添加@RestController以及index方法,以下:

package com.dudu;

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;

@RestController
@SpringBootApplication
public class Chapter1Application {

    @RequestMapping("/")
    public String index(){
        return "Hello Spring Boot";
    }
    public static void main(String[] args) {
        SpringApplication.run(Chapter1Application.class, args);
    }
}複製代碼
  1. @SpringBootApplication是Sprnig Boot項目的核心註解,主要目的是開啓自動配置。後續講解原理的時候再深刻介紹。
  2. main方法這是一個標準的Java應用的main的方法,主要做用是做爲項目啓動的入口。

  3. @RestController註解等價於@Controller+@ResponseBody的結合,使用這個註解的類裏面的方法都以json格式輸出。

最後,啓動項目有三種方式:

  • Chapter1Application的main方法
  • 使用命令 mvn spring-boot:run」在命令行啓動該應用,IDEA中該命令在以下位置:
  • 運行「mvn package」進行打包時,會打包成一個能夠直接運行的 JAR 文件,使用「java -jar」命令就能夠直接運行。

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

結束

雖然我上面講解了那麼多,可是實際開發步驟就是那麼簡單暴力,初始化一個Spring Boot,添加一個控制類,啓動就能看到效果了。
本章做爲入門Spring Boot的入門介紹,相關的須要理解的概念就只有這幾點:

  • Spring Boot父級依賴的概念
  • 起步依賴 spring-boot-starter-xx的概念
  • 應用入口類的做用

想要查看更多Spring Boot乾貨教程,可前往:Spring Boot乾貨系列總綱

源碼下載

( ̄︶ ̄)↗[相關示例完整代碼]


一直以爲本身寫的不是技術,而是情懷,一篇篇文章是本身這一路走來的痕跡。靠專業技能的成功是最具可複製性的,但願個人這條路能讓你少走彎路,但願我能幫你抹去知識的蒙塵,但願我能幫你理清知識的脈絡,但願將來技術之巔上有你也有我,但願大爺你看完打賞點零花錢給我。

訂閱博主微信公衆號:嘟爺java超神學堂(javaLearn)三大好處:

  • 獲取最新博主博客更新信息,首發公衆號
  • 獲取大量視頻,電子書,精品破解軟件資源
  • 能夠跟博主聊天,歡迎程序媛妹妹來撩我

掘金技術徵文第三期:聊聊你的最佳實踐

相關文章
相關標籤/搜索