清華大佬3分鐘,帶你走進SpringBoot

spring全家桶兩兄弟,spingcloud和springboot,因為微服務的興起以及springcloud能力的強大,作為全家桶中兄弟之一的springboot有一種被人忽略的感覺,那麼今天我們就來看一下,這個默默無聞的springboot,他無可取代的魅力在哪裡呢?

本文主要講解什麼是SpringBoot以及SpringBoot搭建

什麼是 Spring Boot

Spring Boot 是由 Pivotal 團隊提供的基於 Spring 的全新框架,其設計目的是為了簡化 Spring 應用的搭建和開發過程。該框架遵循“約定大於配置”原則,採用特定的方式進行配置,從而使開發者無需定義大量的 XML 配置。通過這種方式,Spring Boot 致力於在蓬勃發展的快速應用開發領域成為領導者。

Spring Boot 並不重複造輪子,而且在原有 Spring 的框架基礎上封裝了一層,並且它集成了一些類庫,用於簡化開發。換句話說,Spring Boot 就是一個大容器。

下面幾張圖展示了官網上提供的 Spring Boot 所集成的所有類庫:

清華大佬3分鐘,帶你走進SpringBoot

清華大佬3分鐘,帶你走進SpringBoot

清華大佬3分鐘,帶你走進SpringBoot

Spring Boot 官方推薦使用 Maven 或 Gradle 來構建項目,本教程採用 Maven。

需要SPringleBoot以及微服務相關資料的可以點贊關注評論,私信“資料”獲取免費資料哦~

第一個 Spring Boot 項目

大多數教程都是以 Hello World 入門,本教程也不例外,接下來,我們就來搭建一個最簡單的 Spring Boot 項目。

1.創建一個 Maven 工程,請看下圖:

清華大佬3分鐘,帶你走進SpringBoot

2.在 pom.xml 加入 Spring Boot 依賴:

<parent> <groupid>org.springframework.boot/<groupid> <artifactid>spring-boot-starter-parent/<artifactid> <version>2.1.3.RELEASE/<version>/<parent><dependencies> <dependency> <groupid>org.springframework.boot/<groupid> <artifactid>spring-boot-starter-web/<artifactid> /<dependency>/<dependencies>

3.創建應用程序啟動類 DemoApplication,並編寫以下代碼:

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplicationpublic class DemoApplication

{

public static void main(String[] args) {

SpringApplication.run(DemoApplication.class, args);

}}

4.創建一個 Controller 類 HelloController,用以測試我們的第一個基於 Spring Boot 的 Web 應用:

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

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

@RestControllerpublic

class HelloController {

@RequestMapping("hello")

String hello()

{ return "Hello World!"; }}

5.運行 DemoApplication 類中的 main 方法,看到下圖所示內容說明應用啟動成功:

清華大佬3分鐘,帶你走進SpringBoot

6.瀏覽器訪問:http://localhost:8080/hello,則會看到下圖所示界面:


清華大佬3分鐘,帶你走進SpringBoot


我們可以注意到,沒有寫任何的配置文件,更沒有顯示使用任何容器,只需要啟動 Main 方法即可開啟 Web 服務,從而訪問到 HelloController 類裡定義的路由地址。

這就是 Spring Boot 的強大之處,它默認集成了 Tomcat 容器,通過 Main 方法編寫的 SpringApplication.run 方法即可啟動內置 Tomcat。

它是如何啟動的,內部又是如何運行的呢?具體原理我將在《第03課:Spring Boot 啟動原理》一節中具體分析。

在上面的示例中,我們沒有定義應用程序啟動端口,可以看到控制檯,它開啟了 8080 端口,這是 Spring Boot 默認的啟動端口。Spring Boot 提供了默認的配置,我們也可以改變這些配置,具體方法將在後面介紹。

我們在啟動類里加入 @SpringBootApplication 註解,則這個類就是整個應用程序的啟動類。如果不加這個註解,啟動程序將會報錯,讀者可以嘗試一下。

Spring Boot 還有一個特點是利用註解代碼繁瑣的 XML 配置,整個應用程序只有一個入口配置文件,那就是 application.yml 或 application.properties。接下來,我將介紹其配置文件的用法。

properties 和 yaml

在前面的示例代碼中,我們並沒有看到該配置文件,那是因為 Spring Boot 對每個配置項都有默認值。當然,我們也可以添加配置文件,用以覆蓋其默認值,這裡以 .properties 文件為例,首先在 resources 下新建一個名為 application.properties(注意:文件名必須是 application)的文件,鍵入內容為:

server.port=8081server.servlet.context-path=/api

並且啟動 Main 方法,這時程序請求地址則變成了:http://localhost:8081/api/hello。

Spring Boot 支持 properties 和 yaml 兩種格式的文件,文件名分別對應 application.properties 和 application.yml,下面貼出 yaml 文件格式供大家參考:

server: port: 8080 servlet: context-path: /api

可以看出 properties 是以逗號隔開,而 yaml 則換行+ 兩個空格 隔開,這裡需要注意的是冒號後面必須空格,否則會報錯。yaml 文件格式更清晰,更易讀,這裡作者建議大家都採用 yaml 文件來配置。

以上示例只是小試牛刀,更多的配置將在後面的課程中講解。

本教程的所有配置均採用 yaml 文件。

打包、運行

Spring Boot 打包分為 war 和 jar 兩個格式,下面將分別演示如何構建這兩種格式的啟動包。

在 pom.xml 加入如下配置:

<packaging>war/<packaging><build> <finalname>api/<finalname> <resources> <resource> <directory>src/main/resources/<directory> <filtering>true/<filtering> /<resource> /<resources> <plugins> <plugin> <groupid>org.springframework.boot/<groupid> <artifactid>spring-boot-maven-plugin/<artifactid> /<plugin> <plugin> <artifactid>maven-resources-plugin/<artifactid> <version>2.5/<version> <configuration> <encoding>UTF-8/<encoding> /<configuration> /<plugin> <plugin> <groupid>org.apache.maven.plugins/<groupid> <artifactid>maven-surefire-plugin/<artifactid> <version>2.18.1/<version> <configuration> <skiptests>true/<skiptests> /<configuration> /<plugin> /<plugins>/<build>

這個時候運行 mvn package 就會生成 war 包,然後放到 Tomcat 當中就能啟動,但是我們單純這樣配置在 Tomcat 是不能成功運行的,會報錯,需要通過編碼指定 Tomcat 容器啟動,修改 DemoApplication 類:

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.boot.builder.SpringApplicationBuilder;

import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;

@SpringBootApplicationpublic

class DemoApplication extends SpringBootServletInitializer

{

public static void main(String[] args){

SpringApplication.run(DemoApplication.class, args);

}

@Override

protected SpringApplicationBuilder configure(SpringApplicationBuilder application)

{ return application.sources(DemoApplication.class);

}}

這時再打包放到 Tomcat,啟動就不會報錯了。

在上述代碼中,DemoApplication 類繼承了 SpringBootServletInitializer,並重寫 configure 方法,目的是告訴外部 Tomcat,啟動時執行該方法,然後在該方法體內指定應用程序入口為 DemoApplication 類,如果通過外部 Tomcat 啟動 Spring Boot 應用,則其配置文件設置的端口和 contextPath 是無效的。這時,應用程序的啟動端口即是 Tomcat 的啟動端口,contextPath 和 war 包的文件名相同。

接下來我們繼續看如果達成 jar 包,在 pom.xml 加入如下配置:

<packaging>jar/<packaging><build> <finalname>api/<finalname> <resources> <resource> <directory>src/main/resources/<directory> <filtering>true/<filtering> /<resource> /<resources> <plugins> <plugin> <groupid>org.springframework.boot/<groupid> <artifactid>spring-boot-maven-plugin/<artifactid> <configuration> <fork>true/<fork> <mainclass>com.lynn.DemoApplication/<mainclass> /<configuration> <executions> <execution> <goals> <goal>repackage/<goal> /<goals> /<execution> /<executions> /<plugin> <plugin> <artifactid>maven-resources-plugin/<artifactid> <version>2.5/<version> <configuration> <encoding>UTF-8/<encoding> <usedefaultdelimiters>true/<usedefaultdelimiters> /<configuration> /<plugin> <plugin> <groupid>org.apache.maven.plugins/<groupid> <artifactid>maven-surefire-plugin/<artifactid> <version>2.18.1/<version> <configuration> <skiptests>true/<skiptests> /<configuration> /<plugin> <plugin> <groupid>org.apache.maven.plugins/<groupid> <artifactid>maven-compiler-plugin/<artifactid> <version>2.3.2/<version> <configuration> <source>1.8/<source> <target>1.8/<target> /<configuration> /<plugin> /<plugins>/<build>

然後通過 mvn package 打包,最後通過 java 命令啟動:

java -jar api.jar

如果是 Linux 服務器,上述命令是前臺進程,點擊 Ctrl+C 進程就會停止,可以考慮用 nohup 命令開啟守護進程,這樣應用程序才不會自動停止。

這樣,最簡單的 Spring Boot 就完成了,但是對於一個大型項目,這是遠遠不夠的,Spring Boot 的詳細操作可以參照官網。

下面展示一個最基礎的企業級 Spring Boot 項目的結構:

清華大佬3分鐘,帶你走進SpringBoot

其中,Application.java 是程序的啟動類,Startup.java 是程序啟動完成前執行的類,WebConfig.java 是配置類,所有 Bean 注入、配置、攔截器注入等都放在這個類裡面。

以上實例只是最簡單的 Spring Boot 項目入門實例,想要更加深入瞭解SpringBoot資料的,小編已經整理好了,私信“資料”獲取哦~


清華大佬3分鐘,帶你走進SpringBoot

清華大佬3分鐘,帶你走進SpringBoot


分享到:


相關文章: