天天看點

SpringBoot的初入門(一)一. SpringBoot 為什麼出現?二. SpringBoot架構的入門三. SpringBoot版的 HelloWorld

二八佳人體似酥,腰間仗劍斬愚夫。雖然不見人頭落,暗裡教君骨髓枯。

一. SpringBoot 為什麼出現?

一.一 傳統 Spring的開發的缺點

Spring 是一棧式開發架構,簡化了JavaEE的開發。 但是随着業務更加複雜,導緻配置檔案越來越多,越來越複雜,脫離了Spring最開始出現的初心。

主要有兩個缺點:

  1. 大量的配置檔案,難以維護。
  2. 與第三方架構整合時較複雜。

是以,SpringBoot 就在 Spring的基礎上應用而生了。

一.二 SpringBoot的出現

SpringBoot是在Spring的基礎上進行擴充的,采用 Java Bean的方式進行配置檔案,與第三方架構整合時,也非常容易。

一.二.一 使編碼變得簡單

采用注解方式,進行配置,簡化了很多編碼。

一.二.二 使配置變得簡單

自動配置,快速內建第三方架構

一.二.三 使部署變得簡單

内置Tomcat伺服器,可添加Jetty 等容器。

一.二.四 使監控變得簡單

自帶項目監控。

二. SpringBoot架構的入門

老蝴蝶采用的是 JDK 1.8, Maven 3.6, Idea 工具。

建立項目時,可以通過 網址方式建立,也可以通過 maven 方式建立。

二.一 Idea 通過官方網址建立SpringBoot 項目

二.一.一 建立 HelloWorld 項目

打開 Idea, File --->new --->Project

SpringBoot的初入門(一)一. SpringBoot 為什麼出現?二. SpringBoot架構的入門三. SpringBoot版的 HelloWorld

選中 Spring Initializr 選項, SDK 選擇1.8 方式。

SpringBoot的初入門(一)一. SpringBoot 為什麼出現?二. SpringBoot架構的入門三. SpringBoot版的 HelloWorld

Type 選擇 Maven 類型, Java version 選擇 8 版本。

SpringBoot的初入門(一)一. SpringBoot 為什麼出現?二. SpringBoot架構的入門三. SpringBoot版的 HelloWorld

依賴目前隻選擇一個 Spring Web 依賴。 SpringBoot 版本号選擇 2.4.4 版本。(老蝴蝶為了記念前公司大方,均采用前公司版本号,2.2.2. 後不做聲明)

SpringBoot的初入門(一)一. SpringBoot 為什麼出現?二. SpringBoot架構的入門三. SpringBoot版的 HelloWorld

填入項目名稱和存儲的位置,點選 Finish 即可。

SpringBoot的初入門(一)一. SpringBoot 為什麼出現?二. SpringBoot架構的入門三. SpringBoot版的 HelloWorld

點選完成之後,會通過Maven 進行下載下傳相應的依賴 jar包。

二.一.二 建立Hello World 項目結構

二.一.二.一 目錄結構

SpringBoot的初入門(一)一. SpringBoot 為什麼出現?二. SpringBoot架構的入門三. SpringBoot版的 HelloWorld
  • LearnApplication 是 SpringBoot 的啟動類.
  • resources 下面的 static 會放置靜态的資源。
  • resoruces 下面的 templates 會放置模闆.
  • application.properties 會放置配置檔案。
  • test下面的 LearnApplicationTests 是測試啟動類。
  • pom.xml 會放置一些依賴。

二.一.二.二 自動生成檔案

  1. 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>
        <!--//1-->
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.4</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>org.yueshushu</groupId>
    <artifactId>learn</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>learn</name>
    <description>兩個蝴蝶飛學習SpringBoot入門程式</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <!--//2 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--//3 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <!--//4 -->
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>           
  1. 引入了一個父工程,是 spring-boot-starter-parent , 這個名稱一定要記住。
  2. 引入了一個 spring-boot-starter-web 的依賴。
  3. 引入了一個 spring-boot-starter-test 的測試。
  4. 添加了打包插件

2 . LearnApplication

注意圖示

SpringBoot的初入門(一)一. SpringBoot 為什麼出現?二. SpringBoot架構的入門三. SpringBoot版的 HelloWorld
package org.yueshushu.learn;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
//1.
@SpringBootApplication
public class LearnApplication {

    public static void main(String[] args) {
        //2 
        SpringApplication.run(LearnApplication.class, args);
    }

}           
  1. 添加 SpringBootApplication注解,表示這是一個SpringBoot 項目
  2. SpringApplication 通過main() 方法啟動項目。

3 . test包下的 LearnApplicationTests

package org.yueshushu.learn;

import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
//1
@SpringBootTest
class LearnApplicationTests {

    @Test
    void contextLoads() {
    }

}           
  1. 添加 SpringBootTest 測試注解,表示這是一個SpringBoot的測試類。

4 static,templates,application.properties 檔案下,均沒有内容。

注意 application.properties 檔案前面的圖示。

SpringBoot的初入門(一)一. SpringBoot 為什麼出現?二. SpringBoot架構的入門三. SpringBoot版的 HelloWorld

二.一.二.三 添加 的jar包依賴

SpringBoot的初入門(一)一. SpringBoot 為什麼出現?二. SpringBoot架構的入門三. SpringBoot版的 HelloWorld

隻添加了一個 spring-boot-starter-web 的依賴,就互相引入了

SpringBoot的初入門(一)一. SpringBoot 為什麼出現?二. SpringBoot架構的入門三. SpringBoot版的 HelloWorld
SpringBoot的初入門(一)一. SpringBoot 為什麼出現?二. SpringBoot架構的入門三. SpringBoot版的 HelloWorld

這麼多依賴, 有日志的,有json的,有spring的,有測試的。 注意,沒有資料庫相關的噢。

二.一.二.四 啟動項目

找到 LearnApplication.java 檔案,運作main() 方法即可。

SpringBoot的初入門(一)一. SpringBoot 為什麼出現?二. SpringBoot架構的入門三. SpringBoot版的 HelloWorld

運作測試方法的話, 找到LearnApplicationTests.java, 運作 contextLoads() 方法。

package org.yueshushu.learn;

import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class LearnApplicationTests {

    @Test
    void contextLoads() {
      //添加一句輸出  
        System.out.println("謝謝你,我是兩個蝴蝶飛");
    }

}           
SpringBoot的初入門(一)一. SpringBoot 為什麼出現?二. SpringBoot架構的入門三. SpringBoot版的 HelloWorld

二.二 通過 Maven 形式建立SpringBoot 項目

二.二.一 建立 MavenHelloWorld 項目

File---->new---->Project

SpringBoot的初入門(一)一. SpringBoot 為什麼出現?二. SpringBoot架構的入門三. SpringBoot版的 HelloWorld

選擇 Maven 選項, ProjectSDK 選擇 1.8 樣式。

SpringBoot的初入門(一)一. SpringBoot 為什麼出現?二. SpringBoot架構的入門三. SpringBoot版的 HelloWorld

填寫項目名和 項目坐标資訊。

SpringBoot的初入門(一)一. SpringBoot 為什麼出現?二. SpringBoot架構的入門三. SpringBoot版的 HelloWorld

二.二.二 建立 MavenHelloWorld項目結構

SpringBoot的初入門(一)一. SpringBoot 為什麼出現?二. SpringBoot架構的入門三. SpringBoot版的 HelloWorld

什麼都沒有,沒有依賴,沒有啟動類,隻是一個簡單的Maven 項目。

二.二.三 将普通Maven 項目變成一個 SpringBoot 項目

二.二.三.一 在 pom.xml 配置檔案中添加 依賴

這兒直接将 HelloWorld 裡面的 pom.xml 放置到 MavenHelloWorld 裡面。父工程的版本号,變成 2.2.2.RELEASE

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <!--以後均改成 2.2.2.RELEASE 版本-->
        <version>2.2.2.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>org.yueshushu</groupId>
    <artifactId>learn</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>learn</name>
    <description>兩個蝴蝶飛學習SpringBoot入門程式</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>           

添加完成之後,會發現 MavenHelloWorld 項目引入了大量的依賴。

二.二.三.二 在resources 裡面添加配置

與 HelloWorld 項目一樣,添加 static,templates,application.properties 配置。

SpringBoot的初入門(一)一. SpringBoot 為什麼出現?二. SpringBoot架構的入門三. SpringBoot版的 HelloWorld

二.二.三.三 添加啟動類 HelloApplication

package org.yueshushu.learn;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * @ClassName:HelloApplication
 * @Description 啟動類
 * @Author 兩個蝴蝶飛
 * @Date 2021/4/9 20:39
 * @Version 1.0
 **/
//1. 添加SpringBootApplication注解
@SpringBootApplication
public class HelloApplication {
    public static void main(String[] args) {
        //2. SpringApplication 類運作
        SpringApplication.run(HelloApplication.class,args);
        System.out.println("歡迎我,我是兩個蝴蝶飛,我啟動了!!!!");
    }
}           

運作 HelloApplication 方法.

SpringBoot的初入門(一)一. SpringBoot 為什麼出現?二. SpringBoot架構的入門三. SpringBoot版的 HelloWorld

可以發現,運作成功了。

二.二.三.四 添加 測試類 HelloApplicationTests

放置在 test 目錄 下

SpringBoot的初入門(一)一. SpringBoot 為什麼出現?二. SpringBoot架構的入門三. SpringBoot版的 HelloWorld
package org.yueshushu.learn;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class HelloApplicationTests {

    @Test
    void contextLoads() {

        System.out.println("謝謝你,我是MavenHelloWorld 部分的兩個蝴蝶飛");
    }

}           

點選 contextLoads() 方法進行測試

SpringBoot的初入門(一)一. SpringBoot 為什麼出現?二. SpringBoot架構的入門三. SpringBoot版的 HelloWorld

Idea 可以通過這兩種方式,建立 SpringBoot項目。 推薦使用 Maven的方式。

三. SpringBoot版的 HelloWorld

開發中,都是使用的Web 方式開發。既然我們依賴,選擇了 spring-boot-starter-web, 那麼就開發一個簡單的 Web 項目看看。

三.一 搭建一個簡單的 SpringBoot 環境

具體方式可以看 第二章節部分。

采用的是 Idea 通過 Maven 方式 建立的那個 MavenHelloWorld 項目進行示範。

三.二 添加 Controller 層 url處理類

SpringBoot的初入門(一)一. SpringBoot 為什麼出現?二. SpringBoot架構的入門三. SpringBoot版的 HelloWorld

注意, controller層與 HelloApplication 同級。

@SpringBootApplication 注解,會掃描所在的包和子包。

如果将 HelloController 放置在 org.yueshushu.learn 包下,會掃描到。

如果 放置在 org.yueshushu 包下,不會掃描到。 org包下,也掃描不到。

package org.yueshushu.learn.controller;

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

/**
 * @ClassName:HelloController
 * @Description TODO
 * @Author 嶽建立
 * @Date 2021/4/9 20:55
 * @Version 1.0
 **/
//1. 添加了一個RestController的注解

@RestController
public class HelloController {
    //2.請求位址是 /

    @GetMapping("/")
    public String toHello(){
        return "謝謝你來通路我,我是兩個蝴蝶飛";
    }
    //3. 請示位址是  /info

    @GetMapping("/info")
    public String info(){
        return "我是兩個蝴蝶飛,目前在杭州,我是一個快樂的程式員";
    }
}           

三.三 啟動 HelloApplication 類

啟動 HelloApplication 類,運作main() 方法

"D:\Program Files\Java\jdk1.8.0_91\bin\java.exe" -XX:TieredStopAtLevel=1 -noverify -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dspring.jmx.enabled=true -Dspring.liveBeansView.mbeanDomain 
......
1.7.29.jar;G:\Jar_repository\org\springframework\spring-core\5.2.2.RELEASE\spring-core-5.2.2.RELEASE.jar;G:\Jar_repository\org\springframework\spring-jcl\5.2.2.RELEASE\spring-jcl-5.2.2.RELEASE.jar" org.yueshushu.learn.HelloApplication

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.2.2.RELEASE)

2021-04-09 21:02:08.678  INFO 15952 --- [           main] org.yueshushu.learn.HelloApplication     : Starting HelloApplication on yuezl with PID 15952 (D:\githubBoot\springboot\MavenHelloWorld\target\classes started by 12905 in D:\githubBoot\springboot\MavenHelloWorld)
2021-04-09 21:02:08.680  INFO 15952 --- [           main] org.yueshushu.learn.HelloApplication     : No active profile set, falling back to default profiles: default
2021-04-09 21:02:09.191  INFO 15952 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2021-04-09 21:02:09.197  INFO 15952 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2021-04-09 21:02:09.197  INFO 15952 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.29]
2021-04-09 21:02:09.246  INFO 15952 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2021-04-09 21:02:09.246  INFO 15952 --- [           main] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 539 ms
2021-04-09 21:02:09.333  INFO 15952 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2021-04-09 21:02:09.429  INFO 15952 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2021-04-09 21:02:09.433  INFO 15952 --- [           main] org.yueshushu.learn.HelloApplication     : Started HelloApplication in 0.966 seconds (JVM running for 1.578)
歡迎我,我是兩個蝴蝶飛,我啟動了!!!!
           

控制台可以正常的列印輸出

輸入網址:

http://localhost

:8080/

SpringBoot的初入門(一)一. SpringBoot 為什麼出現?二. SpringBoot架構的入門三. SpringBoot版的 HelloWorld

:8080/info

SpringBoot的初入門(一)一. SpringBoot 為什麼出現?二. SpringBoot架構的入門三. SpringBoot版的 HelloWorld

可以通過網址,正常的通路。

三.四 啟動控制台列印的輸出語句

//1.  啟動的虛拟機位置,啟動的參數,啟動時依賴的jar包 和啟動類
"D:\Program Files\Java\jdk1.8.0_91\bin\java.exe" -XX:TieredStopAtLevel=1 -noverify -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dspring.jmx.enabled=true -Dspring.liveBeansView.mbeanDomain 
......
1.7.29.jar;G:\Jar_repository\org\springframework\spring-core\5.2.2.RELEASE\spring-core-5.2.2.RELEASE.jar;G:\Jar_repository\org\springframework\spring-jcl\5.2.2.RELEASE\spring-jcl-5.2.2.RELEASE.jar" org.yueshushu.learn.HelloApplication
//2. 啟動成功的圖案。 顯示 版本号。可以修改
  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.2.2.RELEASE)
//3. 啟動app
2021-04-09 21:02:08.678  INFO 15952 --- [           main] org.yueshushu.learn.HelloApplication     : Starting HelloApplication on yuezl with PID 15952 (D:\githubBoot\springboot\MavenHelloWorld\target\classes started by 12905 in D:\githubBoot\springboot\MavenHelloWorld)
//4. 找配置環境檔案,可以選擇的。沒有的話,走預設
2021-04-09 21:02:08.680  INFO 15952 --- [           main] org.yueshushu.learn.HelloApplication     : No active profile set, falling back to default profiles: default
//5. 啟動的伺服器 tomcat初始化 和端口号 8080 
2021-04-09 21:02:09.191  INFO 15952 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
//6. 開啟 tomcat 服務 
2021-04-09 21:02:09.197  INFO 15952 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
//7. 啟動 Servlet 引擎
2021-04-09 21:02:09.197  INFO 15952 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.29]
//8. 初始化 Spring 上下文
2021-04-09 21:02:09.246  INFO 15952 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
//9.初始化完成時間
2021-04-09 21:02:09.246  INFO 15952 --- [           main] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 539 ms
//10. 初始化服務任務
2021-04-09 21:02:09.333  INFO 15952 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
//11. tomcat 啟動時的端口号和路徑 path(目前為 空)
2021-04-09 21:02:09.429  INFO 15952 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
//12. 服務啟動成功,啟動的總時間 
2021-04-09 21:02:09.433  INFO 15952 --- [           main] org.yueshushu.learn.HelloApplication     : Started HelloApplication in 0.966 seconds (JVM running for 1.578)
歡迎我,我是兩個蝴蝶飛,我啟動了!!!!           

三.五 打包并控制台方式運作

Terminal 控制台 進行安裝

SpringBoot的初入門(一)一. SpringBoot 為什麼出現?二. SpringBoot架構的入門三. SpringBoot版的 HelloWorld

靜靜等待,直到運作成功。

SpringBoot的初入門(一)一. SpringBoot 為什麼出現?二. SpringBoot架構的入門三. SpringBoot版的 HelloWorld

檢視磁盤目錄,發現确實有這麼一個jar包,時間上也是符合的.

SpringBoot的初入門(一)一. SpringBoot 為什麼出現?二. SpringBoot架構的入門三. SpringBoot版的 HelloWorld

通過 cmd 的 java -jar Xxx.jar 的方式進行運作程式。

D:\githubBoot\springboot\MavenHelloWorld\target>java -jar learn-0.0.1-SNAPSHOT.jar           
SpringBoot的初入門(一)一. SpringBoot 為什麼出現?二. SpringBoot架構的入門三. SpringBoot版的 HelloWorld

浏覽器通路時,可以正常的響應

SpringBoot的初入門(一)一. SpringBoot 為什麼出現?二. SpringBoot架構的入門三. SpringBoot版的 HelloWorld

關閉 cmd 視窗後,再次請求,就請求不到了。

SpringBoot的初入門(一)一. SpringBoot 為什麼出現?二. SpringBoot架構的入門三. SpringBoot版的 HelloWorld

本章節的代碼放置在 github 上:

https://github.com/yuejianli/springboot/tree/main/MavenHelloWorld

謝謝您的觀看,如果喜歡,請關注我,再次感謝 !!!