天天看點

5分鐘快速上手Spring Boot

概述

與一些動态語言(如Ruby、Groovy、Node.js)相比,Java開發顯得異常笨重。接觸過外包項目的朋友也有所了解,如果要開發一個小型項目,首選的程式設計語言并不是Java,而是PHP。為什麼呢?因為開發起來快!目前很多大型網際網路公司的早起程式設計語言都是類似PHP這種能夠快速開發的語言。

既然問題出現了,那必然有解決問題的方案,SpringBoot做到了。SpringBoot是由Pivotal公司所屬團隊研發,該公司的企業宗旨為:

緻力于“改變世界構造軟體的方式(We are transforming how the world builds software)”,提供雲原生應用開發 PaaS 平台及服務,幫助企業客戶采用靈活軟體開發方法論,進而提高軟體開發人員工作效率、減少運維成本,實作數字化轉型、IT 創新,并最終實作業務創新。

SpringBoot讓我們可以在幾分鐘内就搭建出一套項目的基礎架構,同時為我們提供了大量內建方案——starters。基于“約定優于配置”的理念,減少大量的配置檔案,讓項目快速、簡單的運作起來。内置web容器(如tomcat、Netty等),通過jar -jar指令即可啟動一個項目。

項目建立

環境要求

采用SpringBoot最新版本2.1.3來講解。我們使用Maven項目管理工具來管理項目,電腦上要預先安裝好Maven3.3+(SpringBoot要求)版本。JDK當然也少不了,但需要JDK8及以上版本。

建立項目方式一

通過官網提供的Spring Initializr來建立項目。通路官方網址:https://start.spring.io/ 。顯示内容如下:

5分鐘快速上手Spring Boot

簡單了解一下相應的參數選擇:

  • Project:選擇項目建構的工具,采用預設的Maven;
  • Language:選擇建構項目的語言,采用預設的Java;
  • Spring Boot:選擇使用的SpringBoot的版本資訊,采用最新版本2.1.3;
  • Project Metadata:設定項目的中繼資料,主要就是設定Maven相關的配置;Group,對應Maven中的GroupId,Artifact對應Maven中的ArtifactId。

打開More options會看到另外一些預設的配置:

5分鐘快速上手Spring Boot
  • Packaging:指定打包的模式,預設采用Jar包模式,即使用java -jar啟動即可,如果需要部署到單獨的tomcat或其他web容器,則可選擇war包。
  • Java Version:SpringBoot2.13預設支援最低JDK為8。

我們前面提到的starters的選擇就是在Dependencies中設定,在沒有輸入任何内容的時候,能夠看到該輸入欄目有對應的提示資訊。當輸入web時,會動态比對與web相關的依賴,點選“➕”添加即可。這裡選擇web的最小化配置。

5分鐘快速上手Spring Boot

當完成選擇,點選“Generate Project”即可自動下載下傳建立好的項目代碼。解壓之後,會看到是一個标準的Maven項目,使用idea等IDE引入Maven項目,自動加載依賴即可,這裡不再贅述。

5分鐘快速上手Spring Boot

建立項目方式二

第二種建立方式就是直接使用IDEA進行建立,當然前提是IDEA中已經安裝了Spring Boot相關的插件——Spring Boot,如下圖所示。

5分鐘快速上手Spring Boot

像建立其他項目一樣,File,New,Project…,即可進入建立項目頁面,如下圖:

5分鐘快速上手Spring Boot

選擇Spring Initializr,展示右邊基礎配置項。我們會發現,其實此插件進行建立時預設也是調用官方提供的網址進行建立。選擇JDK8,點選下一步。

5分鐘快速上手Spring Boot

像第一種方式一樣,填寫相關參數資訊,這裡就不再重複描述。點選“Next”,進入選擇依賴界面。點選“Web”,同時勾選中間部分出現的“Web”。能夠看到下面出現了“Servlet web application with Spring MVC and Tomcat”,是以,項目已經具有了SpringMVC架構和Tomcat内置web容器了。

5分鐘快速上手Spring Boot

當然,如果項目需要,也可以選擇添加更多相關依賴。完成依賴選擇之後,點選“Next”,指定項目的名稱和位置,點選“Finish”,等待項目建構完成即可。根據網絡速度,等待時間有所不同,當添加依賴jar包一直卡着不動時,可考慮關閉項目重新打開,手動“Reimport”一下Maven依賴。

項目目錄結構

項目完成建立之後,來看一下目錄結構:

5分鐘快速上手Spring Boot

項目目錄結構簡單明了,就是一個普通的Maven項目。src/main/java目錄下為項目的啟動程式和後續需要編寫的業務代碼。resources目錄存放配置檔案和資源檔案,如web項目的js、css、image、jsp等。test目錄存放單元測試類。

配置檔案

在正常spring建構的web項目中的配置檔案,比如spring-content.xml、web.xml等配置檔案都不見了。能夠看到的隻有application.properties,它預設内置了一些配置,可以通過IDEA的提示功能,快速配置相應的參數,比如在檔案内入手server,則會給出如下提示:

5分鐘快速上手Spring Boot

通過提示可以看出,内嵌tomcat預設的端口為8080。可以通過server.port=xx,重新指定端口号。

項目依賴

在之前的Spring項目搭建我們需要了解每個功能都使用了Spring的哪些核心依賴包,然後逐一引入。使用Spring Boot便無需關注那麼多。來看一下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>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.3.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <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>           

複制

看到pom裡面的内容是不是感覺清爽到極緻了。是的,忽略掉Maven的中繼資料配置,其實我們僅僅引入了三部分的内容:

parent元素,引入了spring-boot-starter-parent的依賴管理,主要提供了整體版本控制和打包等内容;

dependencies元素中,引入了spring-boot-starter-web這個starter和單元測試的starter。

build元素中,引入了一個建構項目的maven插件。

而此刻,如果打開項目的jar包依賴,會看到已經引入了幾十個功能相關的jar包了。

HelloWorld

編寫一個可通過浏覽器通路的hello web程式。在com.example.demo包下建立一個controller的包,并建立HelloWorldController類。

package com.example.demo.controller;

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

/**
 * @author zzs
 */
@RestController
public class HelloWorldController {

	@RequestMapping
	public String hello() {
		return "hello world!";
	}
}           

複制

像我們使用spring mvc一樣,在controller中實作上面的代碼。運作DemoApplication中的main方法啟動項目,在浏覽器輸入:http://localhost:8080/hello,頁面顯示出”hello world!”,一個簡單的rest接口請求便完成了。

單元測試

在DemoApplicationTests中寫一段簡單的單元測試,代碼如下:

package com.example.demo;

import com.example.demo.controller.HelloWorldController;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.MediaType;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;

import static org.hamcrest.core.IsEqual.equalTo;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

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

	private MockMvc mockMvc;

	@Before
	public void init() {
		mockMvc = MockMvcBuilders.standaloneSetup(new HelloWorldController()).build();
	}

	@Test
	public void testHello() throws Exception {
		mockMvc.perform(MockMvcRequestBuilders.get("/hello").accept(MediaType.APPLICATION_JSON))
				.andExpect(status().isOk())
				.andExpect(content().string(equalTo("hello world!")));
	}
}           

複制

注意事項

至此,已經完成了SpringBoot最基本的項目已經完成。這裡再補充兩條注意事項:

1、業務代碼和建立的package一定要放在啟動main方法的同級包下或下一級包下面,也就是說springboot的啟動程式一定要在最頂層,否則啟動時某些注解無法檢測到。

2、如果業務中有其他的類中有main方法,注意注釋掉或替換為單元測試的形式,因為springboot在啟動時會尋找main方法,如果存在多個在使用java -jar啟動時會出現莫名其妙的問題。

項目源代碼:https://github.com/secbr/springboot-all/tree/master/demo

關注微信公衆:程式新視界,回複“springboot01”即可獲得本篇内容PDF版本,更多免費資料,期待你的到來。

Spring技術視訊

CSDN學院:《Spring Boot 視訊教程全家桶》