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://martinfowler.com/articles/microservices.html
- 翻譯: https://www.cnblogs.com/liuning8023/p/4493156.html
如何構建微服務
一個大型系統的微服務架構,就像一個複雜交織的神經網路,每一個神經元就是一個功能元素, 它們各自完成自己的功能,然後通過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:https://start.spring.io/
專案建立方式一:使用Spring Initializr 的 Web頁面建立專案
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 這個網站生成,然後拷貝到檔案中即可!