SpringBoot系列教程-不一樣的Hello

fans news 發佈 2021-12-08T00:35:15+00:00

關於SpringBoot在後面系列的教程中,會詳細分享SpringBoot生態圈中的各個成員,例如:最基礎的3層架構訪問資料庫的3種常用方案MyBatisMyBatis-Plusfluent mybatisNoSQLRedisMongoDBElasticSearch消息隊列Rab

關於SpringBoot

在後面系列的教程中,會詳細分享SpringBoot生態圈中的各個成員,例如:

  • 最基礎的3層架構
  • 訪問資料庫的3種常用方案
    1. MyBatis
    2. MyBatis-Plus
    3. fluent mybatis
  • NoSQL
    1. Redis
    2. MongoDB
    3. ElasticSearch
  • 消息隊列
    1. RabbitMQ
    2. Kafka
    3. RocketMQ
  • ...

系列教程特點

  • 主流:分享的都是主流的技術點
  • 詳細:非常詳細,會穿插各種小知識點
  • 全面:如前文所述,數據訪問層會分享
    1. MyBatis
    2. MyBatis-Plus
    3. fluent mybatis
    4. sharding-JDB
  • 深度:會分享研發過程中需要注意的各種知識點,比如日誌輸出常遇到的坑,絕對的乾貨

創建工程

  • Step1: 啟動idea,我用的是IDEA Community Edition(不同版本,界面長的會稍微有些差別),點擊【New Project】按鈕,就是下圖中的【+】圖標
  • Step2:如下圖:
    • 選擇Maven
    • Project SDK:選擇你本地JDK版本,我本地安裝的是JDK11,想嘗鮮的同學,可以安裝JDK的最新版本:JDK17
    • 設置好JDK後,按【Next】按鈕
  • Step3:下圖中設置項目的信息,點擊【Artifact Coordinates】會展開更詳細的信息

老碼農設置的信息如下,根據你自己的項目實際情況,大家自行靈活調整

知識點:關於GroupId

groupId一般分為多個段,段之間用【.】分割,通常

  • 第一段為域:比如org(非營利組織)、com(商業組織)、cn(中國)、top(國際通用頂級域名GTLD(Generictop-level domain top))等
  • 第二段為公司名稱:比如我的就設置成coderoldgeek
  • 第三段為項目名稱:我設置成的是【springboot】
  • 第四段可以是子項目名稱:我設置成的是【examples】

groupId不要隨便設置,最好和包結構保持一致。

設置好這些信息,直接按【Finish】按鈕。

  • Step4: 項目開始創建,可能會需要幾秒鐘,創建好後,如下圖展示

springboot01-01

  • Step5: 關於目錄結構說明
oldgeek-springboot-examples
├─.idea     
│─src
│ └─main
│   ├─java
│   ├─resources
│ └─test
└─pom.xml

目錄詳細說明參照下表:

**關於Maven的詳細教程:**老碼農正在認真整理,稍後會分享給大家。

創建子模塊

為什麼要創建子模塊?

  • 本篇文章後面涉及的例子,其實不用創建子工程,直接在:src/main/java編寫代碼也可以完成。
  • 創建子模塊:後面會分享很多內容,所以想按照知識點創建子工程,便於大家根據自己需要去參考。

創建子模塊

  • Step1: 右鍵選父工程:【oldgeek-springboot-examples 】連續點擊【New】 -> 【Module...】
  • Step2: 同樣,選擇【Maven】-> 【Module SDK】,按【Next】按鈕
  • Step3: 下圖中,只需要輸入Name即可,其他的不要修改
    • Name:springboot-hello
  • Step4: 創建子模塊,工程的目錄結構如下
oldgeek-springboot-examples
├─.idea
├─springboot-hello
│ └─src
│   └─main
│      ├─java
│      └─resources
│   └─pom.xml 
│─src
│ └─main
│   ├─java
│   └─resources
│ └─test
└─pom.xml

**關於Maven的詳細教程:**老碼農正在認真整理,稍後會分享給大家。

有些同學會有疑問

父工程

  • src/main/java和src/main/resources/還有用嗎?可以刪掉嗎?
    • 答:如果按模塊創建工程,這兩個目錄可以刪掉
  • 父工程:pom.xml 文件可以刪掉嗎?
    • 答:不可以,這個有大用處,本篇文章暫時不展開,咱們徐徐來,莫急

準備編寫第一個能啟動工程,激動人心的時刻馬上就要來了,繼續跟著做

  • Step1: 依次點擊:【springboot-hello】-> 【src】-> 【main】-> 【java】按右鍵,如下圖,依次點擊【New】-> 【Package】
  • Step2: 輸入如下的Package目錄信息
com.oldgeek.springboot.examples.hello
  • Step3: 創建啟動類

創建過程,如下圖,右鍵選Package路徑【com.oldgeek.springboot.examples.hello】,依次【New】-> 【Java Class】

  • Step4: 輸入類名:HelloApplication,回車,啟動類就創建好了
  • Step5: 本次我們要分享的是SpringBoot,接下來我們需要配置springBoot的包

打開子工程:Springboot-hello/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">
    <parent>
        <artifactId>oldgeek-springboot-examples</artifactId>
        <groupId>com.coderoldgeek.springboot.examples</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>springboot-hello</artifactId>

    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
    </properties>
</project>

我們添加和SpringBoot相關的依賴

  • 添加我們使用的SpringBoot版本,在屬性中定義版本信息
 <properties>
         <maven.compiler.source>11</maven.compiler.source>
         <maven.compiler.target>11</maven.compiler.target>
         <!-- spring-boot version -->
         <spring-boot.version>2.5.0</spring-boot.version>
</properties>
  • 添加SpringBoot依賴的包
   <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>${spring-boot.version}</version>
        </dependency>
    </dependencies>
  • 子工程完整的pom文件如下
<?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">
    <parent>
        <artifactId>oldgeek-springboot-examples</artifactId>
        <groupId>com.coderoldgeek.springboot.examples</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>springboot-hello</artifactId>

    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
        <!-- spring-boot version -->
        <spring-boot.version>2.5.0</spring-boot.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>${spring-boot.version}</version>
        </dependency>
    </dependencies>
</project>

重要知識點:

  • 依賴包的版本儘量在屬性中定義定義,不要散落在各子工程中直接硬編碼,容易導致版本混亂
    • 儘量在工程中定義,後面會講到,本篇不展開。
  • 不要添加沒有使用的依賴,用啥添啥,千萬不要整太多垃圾。
  • 下面這張圖要注意,修改完pom.xml文件配置選項,一般不會自動刷新,需要按照下面步驟刷新,主要是從遠端倉庫獲取jar包,放到本地倉庫。
    • 如下圖:選中工程,按右鍵,選擇【Maven】->【Reload project】,按下後,會去Maven中央伺服器拉取我們所需要的jar包,拉取的時間看你當時的網速,慢的話,可能需要幾分鐘。耐心等待就行。
  • Step6: 編寫啟動類代碼,完整代碼如下
package com.oldgeek.springboot.examples.hello;

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

@SpringBootApplication
public class HelloApplication {
    public static void main(String[] args) {
        SpringApplication.run(HelloApplication.class, args);
    }
}


代碼解釋:

延伸知識點:我們可以看下SpringBootApplication是SpringBoot的核心註解,他是一個組合註解,我們可以查看註解的原始碼,截取部分原始碼,原始碼的分享不是本篇文章重點。

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
                @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {
    • SpringBootConfiguration:如下原始碼,繼承自:Configuration,此註解是個配置類,容器啟動時會配置初始化參數
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Configuration
@Indexed
public @interface SpringBootConfiguration
    • EnableAutoConfiguration:啟動SpringBoot自動配置機制,根據pom包中依賴為當前項目自動進行配置,例如,添加了 spring-boot-starter-web 依賴,會自動添加 Tomcat 和 Spring MVC 的依賴,那麼 Spring Boot 會對 Tomcat 和 Spring MVC 進行自動配置。
    • ComponentScan:掃描包的配置,注意:他會自動掃描同級目錄或者下級包里的Bean,所以本入口類建議放置在 grounpID + arctifactID 組合的包名下,我們是:com.oldgeek.springboot.examples.hello
    • SpringBoot實例初始化完成後,就會調用run方法啟動服務。
    • 啟動類添加註解:@SpringBootApplication
    • Main方法中調用SpringApplication.run(HelloApplication.class, args);


  • Step7: 點擊啟動類:HelloApplication,按右鍵,選擇【Run 'HelloApplication.main()'】開始啟動咱們的工程。
  • Step8: 如果你能看到如圖所示的畫面,恭喜你,大概率工程是已經正常啟動了。
    • 出現問題,先看日誌,養成看日誌習慣
    • 日誌從下往上看,容易定位問題
    • 小知識點
  • Step9: 我們試著訪問下,打開你的瀏覽器,輸入:http://localhost:8080,點回車,悲劇,下面畫面會出現沒關係,我們現在只是把服務期來了,還沒給他添加任何業務邏輯呢,自然會掛。

添加業務邏輯

  • Step1: 選中Package:com.oldgeek.springboot.examples.hello,【New】->【Package】

向下圖輸入:controller,完整的package:com.oldgeek.springboot.examples.hello.controller

  • Step2: 添加控制類:HelloController

選中controller,點擊右鍵:【New】->【Java Class】,創建控制類

輸入控制類名字:HelloController

  • Step3: 編寫業務邏輯
package com.oldgeek.springboot.examples.hello.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class HelloController {
    /**
     * Hello World
     */
    @GetMapping("hello")
    @ResponseBody
    public String hello() {
        return "歡迎您光臨小碼匠和老碼農的SpringBoot家園<br>未來的日子中,我們一起學編程,一起分享技術";
    }
}

代碼說明:

  • 註解:@Controller:控制器Controller負責處理由DispatcherServlet 分發的請求,它把用戶請求的數據經過業務處理層處理之後封裝成一個Model ,然後再把該Model 返回給對應的View 進行展示。
  • 註解:@GetMapping("hello"):定義Request請求和Controller 方法之間的映射,此處我們是用Get方式請求
  • 註解:@ResponseBody:把處理的結果直接寫入 HTTP response body 中,返回給調用方
  • Step4:
    • 重新啟動服務
  • 訪問,再次啟動瀏覽器,地址欄中輸入:http://localhost:8080/hello

特別關注

  • pom中添加新依賴時,要執行maven的【Reload Project】操作,不然很可能編譯失敗
  • groupId和artifactId的命名規則,不要隨意命名,專業人士做專業事
關鍵字: