1. 程式人生 > 實用技巧 >01、SpringBoot快速入門

01、SpringBoot快速入門

Spring

Spring是一個開源框架,2003年興起的一個輕量級的java開發框架,作者:Rod Johnson。

Spring是為了解決企業級應用開發的複雜性而建立的,簡化開發。

Spring是如何簡化java開發的

為了降低java開發的複雜性,Spring採用了以下4種關鍵策略:

1、基於POJO的輕量級和最小侵入性程式設計。

2、通過IOC,依賴注入(DI)和麵向介面實現鬆耦合。

3、基於切面(AOP)和慣例進行宣告式程式設計。

4、通過切面和模板減少樣式程式碼。

Spring的發展

  • Spring1.x時代

    在Spring1.x時代,都是通過xml檔案配置bean,隨著專案的不斷擴大,需要將xml配置分放到不同的配置檔案中,需要頻繁的在java類和xml配置檔案中切換。

  • Spring2.x時代

    隨著JDK 1.5帶來的註解支援,Spring2.x可以使用註解對Bean進行申明和注入,大大的減少了xml配置檔案,同時也大大簡化了專案的開發。

    那麼,問題來了,究竟是應該使用xml還是註解呢?

  • 註解還是XML

    在spring早期版本中,由於當時的JDK並不支援註解,因此只能使用XML的配置,很快,隨著JDK升級到JDK5之後,它加入了註解的新特性,這樣註解就被廣泛地使用起來, 於是spring內部也分為兩派,一派是使用XML的,一派是使用註解的,為了簡化開發,在spring2.X之後的版本也引入了註解,不過是少量的註解,如@Component @Service等,但是功能還是不強大,因此對於srping的開發,大部分情況下還是使用XML為主,隨著註解的增加,尤其是Servlet3.0之後,WEB容器可以脫離web.xml的部署,使用得WEB容器完全可以基於註解開發,對於spring3和spring4的版本註解功能越來越強大。對於XML的依賴起來越少,到了4.0完全可以脫離XML, 所以在spring中使用註解開發佔據了主流地位,近年來。微服務的流行,越來越多的企業要求快速開發,所以spring Boot更加興旺了。

    1、應用的基本配置用xml,比如:資料來源、資原始檔等;

    2、業務開發用註解,比如:Service中注入bean等;

  • Spring3.x到Spring4.x

    從Spring3.x開始提供了Java配置方式,使用Java配置方式可以更好的理解你配置的Bean,現在我們就處於這個時代,並且Spring4.x和Springboot都推薦使用java配置的方式。

SpringBoot

概述

學過javaweb的就知道,開發一個web應用,從最初開始接觸Servlet結合Tomcat,跑出一個HelloWolrld程式,是要經歷特別多的步驟;後來就用了框架Struts,再後來是SpringMVC,到了現在的SpringBoot,過一兩年又會有其他web框架出現;框架在不斷演進,然後自己開發專案所有的技術也再不斷的變化、改造。

什麼是SpringBoot呢,就是一個javaweb的開發框架,和SpringMVC類似,對比其他javaweb框架的好處,官方說是簡化開發,約定大於配置,you can "just run",能迅速的開發web應用,幾行程式碼開發一個http介面。

所有的技術框架的發展似乎都遵循了一條主線規律:從一個複雜應用場景衍生一種規範框架,人們只需要進行各種配置而不需要自己實現它,這時候強大的配置功能成了優點;發展到一定程度之後,人們根據實際生產應用情況,選取其中實用功能和設計精華,重構出一些輕量級的框架;之後為了提高開發效率,嫌棄原先的各類配置過於麻煩,於是開始提倡“約定大於配置”,進而衍生出一些一站式的解決方案。

這就是Java企業級應用--> J2EE--> spring--> spring boot的過程。

隨著Spring不斷的發展,涉及的領域越來越多,專案整合開發需要配合各種各樣的檔案,慢慢變得不那麼易用簡單,違背了最初的理念,甚至人稱配置地獄。Spring Boot 正是在這樣的一個背景下被抽象出來的開發框架,目的為了讓大家更容易的使用Spring、更容易的整合各種常用的中介軟體、開源軟體;

SpringBoot基於Spring 開發, SpirngBoot本身並不提供Spring框架的核心特性以及擴充套件功能,只是用於快速、敏捷地開發新一代基於Spring框架的應用程式。也就是說,它並不是用來替代Spring的解決方案,而是和Spring框架緊密結合用於提升Spring 開發者體驗的工具。SpringBoot以約定大於配置的核心思想,預設幫我們進行了很多設定,多數SpringBoot應用只需要很少的Spring配置。同時它集成了大量常用的第三方庫配置(例如Redis、MongoDB、Jpa、RabbitMQ、Quartz 等等),SpringBoot應用中這些第三方庫幾乎可以零配置的開箱即用。

簡單來說就是SpringBoot其實不是什麼新的框架,它預設配置了很多框架的使用方式,就像maven整合了所有的jar包,SpringBoot整合了所有的框架。

SpringBoot出生名門,從一開始就站在一個比較高的起點,又經過這幾年的發展,生態足夠完善,SpringBoot已經當之無愧成為Java領域最熱門的技術。

SpringBoot的主要優點

  • 為所有Spring開發者更快的入門。
  • 開箱即用,提供各種預設配置來簡化專案配置。
  • 內嵌式容器簡化Web專案。
  • 沒有冗餘程式碼生成和XML配置的要求。
  • 提供生產就緒功能,如指標,健康檢查和外部配置。

微服務

什麼是微服務

微服務是一種架構風格,它要求我們在開發一個應用的時候,這個應用必須構建成一系列小服務的組合;可以通過http的方式進行互通。要說微服務架構,先得說說過去我們的單體應用架構。

單體應用架構

所謂單體應用架構(all in one)是指,我們將一個應用中的所有應用服務都封裝在一個應用中。

無論是ERP、CRM或是其他什麼系統,你都把資料庫訪問,web訪問,等等各個功能放到一個war包內。

  • 這樣做的好處是:易於開發和測試;也十分方便部署;當需要擴充套件時,只需要將war複製多份,然後放到多個伺服器上。再做個負載均衡就可以了。

  • 單體應用的缺點是,哪怕我要修改一個非常小的地方,我都需要停掉整個服務,重新打包、部署整個應用war包。特別是對於一個大型應用,我們不可能把所有內容都放在一個應用裡面,我們如何維護、如何分工合作都是問題。

微服務架構

all in one 的架構方式,我們把所有的給你拿單元放在一個應用裡面,然後我們把整個應用部署到伺服器上,如果負載能力不行,我們將整個應用進行水平復制,進行擴充套件,然後再負載均衡。

所謂微服務架構,就是打破之前all in one的架構方式,把每個功能元素獨立出來。把獨立出來的功能元素的動態組合,要的功能元才去拿來組合,需要多一些時可以整合多個功能元素。所以微服務架構是對功能元素進行復制,而沒有對整個應用進行復制。

這樣做的好處是:

  • 節省了呼叫資源。
  • 每個功能元素的服務都是一個可替換的、可獨立升級的軟體程式碼。

Martin Flower於2014年3月25日寫的《Microservices》,詳細的闡述了什麼是微服務。

如何構建微服務

一個大型系統的微服務架構,就像一個複雜交織的神經網路,每一個神經元就是一個功能元素, 它們各自完成自己的功能,然後通過http相互請求呼叫。比如一個電商系統,查快取、連資料庫、瀏覽頁面、結賬、支付等服務都是一個個獨立的功能服務,都被微化了,它們作為一個個微服務共同構建了一個龐大的系統。如果修改其中的- -個功能,只需要更新升級其中-一個功能服務單元即可。

但是這種龐大的系統架構給部署和運維帶來很大的難度。於是,spring為我們帶來 了構建大型分散式微服務的全套、全程產品:

  • 構建一個個功能獨立的微服務應用單元,可以使用springboot,可以幫我們快速構建一個應用;
  • 大型分散式網路服務的呼叫,這部分由spring cloud來完成, 實現分散式;
  • 在分散式中間,進行流式資料計算、批處理,我們有spring cloud data flow。
  • spring為我們想清楚了整個從開始構建應用到大型分散式應用全流程方案。

HelloWorld

準備工作

  • 環境準備:java:jdk1.8,Maven3.5以上,SpringBoot2.x最新版

  • 開發工具:IDEA

  • Maven設定

    給maven 的settings.xml配置檔案的profiles標籤新增

    <profile>
      <id>jdk-1.8</id>
      <activation>
        <activeByDefault>true</activeByDefault>
        <jdk>1.8</jdk>
      </activation>
      <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
      </properties>
    </profile>
    
  • IDEA設定

    整合maven進來

建立專案

Spring官方提供了非常方便的工具讓我們快速構建應用,提供了一個快速生成的網站,IDEA集成了這個網站!

專案建立方式一:使用Spring Initializr 的 Web頁面建立專案

1、開啟 https://start.spring.io/

2、填寫專案資訊

3、點選”Generate Project“按鈕生成專案,下載此專案

4、解壓專案包,並用IDEA以Maven專案匯入,一路下一步即可,直到專案匯入完畢。

專案建立方式二:使用 IDEA 直接建立專案

1、建立一個新專案

2、選擇spring initalizr,可以看到預設就是去官網的快速構建工具那裡實現

3、填寫專案資訊

4、選擇初始化的元件(初學勾選 Web 即可)

5、填寫專案路徑

6、等待專案構建成功

專案結構分析:

通過上面步驟完成了基礎專案的建立。就會自動生成以下檔案。

1、程式的主啟動類

2、一個 application.properties 配置檔案

3、一個 測試類

4、一個 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 https://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.2.6.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.coydone</groupId>
	<artifactId>helloworld</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>helloworld</name>
	<description>Demo project for Spring Boot</description>
	<properties>
		<java.version>1.8</java.version>
	</properties>
	<dependencies>
		<!--springboot所有的依賴都是使用spring-boot-starter開頭的-->
		<!--web依賴:tomcat dispatcherServlet xml-->
		<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>
			<exclusions>
				<exclusion>
					<groupId>org.junit.vintage</groupId>
					<artifactId>junit-vintage-engine</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
	</dependencies>
	<build>
		<!--打jar包外掛-->
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>
</project>

如上所示,主要有四個部分:

  • 專案元資料資訊:建立時候輸入的Project Metadata部分,也就是Maven專案的基本元素,包括: groupld、 artifactld、 version、 name、description等
  • parent:繼承spring- boot -starter -parent的依賴管理,控制版本與打包等內容
  • dependencies:專案具體依賴,這裡包含了spr ing- boot-starter -web用於實現HTTP介面(該依賴中包含了Spring MVC),官網對它的描述是:使用Spring MVC構建Web (包括RESTful)應用程式的入門者,使用Tomcat作為預設嵌入式容器。; spring boot-starter-test用於編寫單元測試的依賴包。
  • build:構建配置部分。預設使用了spring-boot-maven-plugin,配合spring-boot-starter-parent就可以把SpringBoot應用打包成JAR來直接執行。

編寫一個http介面

1、在主程式的同級目錄下,新建一個controller包,一定要在同級目錄下,否則識別不到

2、在包中新建一個HelloController類

@RestController
public class HelloController {
    @RequestMapping("/hello")
    public String hello(){
        //呼叫業務,接收前端的引數
        return "hello,world";
    }
}
@Controller
@RequestMapping("/hello")
public class HelloController {
    //http://localhost:8080/hello/hello
    @GetMapping("/hello")
    @ResponseBody
    public String hello(){
        return "hello";
    }
}

3、編寫完畢後,從主程式啟動專案,瀏覽器發起請求,看頁面返回;控制檯輸出了 Tomcat 訪問的埠號!

resources資料夾中目錄結構

  • static:儲存所有的靜態資源; js、css、images。
  • templates:儲存所有的模板頁面;(Spring Boot預設jar包使用嵌入式的Tomcat,預設不支援JSP頁面);可以使用模板引擎(freemarker、thymeleaf)。
  • application.properties:Spring Boot應用的配置檔案,可以修改一些預設設定。

將專案打成jar包,點選 maven的 package

<!--
    在工作中,很多情況下我們打包是不想執行測試用例的
    可能是測試用例不完事,或是測試用例會影響資料庫資料
    跳過測試用例執
    -->
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <configuration>
        <!--跳過專案執行測試用例-->
        <skipTests>true</skipTests>
    </configuration>
</plugin>

如果打包成功,則會在target目錄下生成一個 jar 包

cmd視窗執行java -jar指令即可執行

修改專案的埠號

在配置檔案application.properties中

# 更改專案的埠號
server.port=8081

自定義 banner 圖案

如何更改啟動時顯示的字元拼成的字母,SpringBoot呢?也就是 banner 圖案;

只需一步:到專案下的 resources 目錄下新建一個banner.txt 即可。

圖案可以到:https://www.bootschool.net/ascii 這個網站生成,然後拷貝到檔案中即可!