Spring Boot 學習-基礎

肥龍發表於2022-02-27

一、Spring Boot 概述

SpringBoot 定義

  • Spring Boot 並不是用來替代 Spring 的新框架,而是和 Spring 框架緊密結合用於提升 Spring 開發者體驗的工具。
  • Spring Boot 極大的簡化了 Spring 框架所需的配置檔案,其主要 約定大於配置的核心思想 ,預設幫我們進行了很多設定,多數 Spring Boot 應用只需要很少的 Spring 配置。

Spring Boot 優點

  • 自動裝配 :提供各種預設配置來簡化專案配置
  • 起步依賴 :將具備某種功能的依賴打包到一起,並提供一些預設的功能。
  • 輔助功能 :提供了一些大型專案中常見的非功能性特性,如嵌入式伺服器、安全、指標、健康檢測、外部配置等。

二、Spring Boot 快速入門

1、建立專案的兩種方式:

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

  • 開啟對應的網址 : https://start.spring.io/
  • 填寫專案資訊
  • 點選 “ Generate Project ” 按鈕生成專案,下載此專案
  • 解壓專案壓縮包,並用 IDEA 以 Maven 專案匯入

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

  • 選擇 Spring initalizr (也是直接去官網構建)
  • 填寫專案資訊
  • 選擇初始化的元件(Web)
  • 填寫專案路徑

2、專案結構解析

  • 程式的主啟動類 : 啟動整個程式的入口
  • application.properties :配置檔案(用於更改預設配置)
  • pom.xml : 主 POM 檔案
  • test 類 : 測試用例編寫

3、自定義一個 Controller 類

  • 自定義的 Controller 類 一定要在 啟動類 同級目錄下,否者會無法識別

  • @RestController
    public class HelloController {
        @RequestMapping("/hello")
        public String hello() {
            return "Hello World";
        }    
    }
    

4、主程式啟動,瀏覽器發起請求,就可以完成訪問。

5、有趣小技巧:如何更改啟動時顯示的字元拼成的字母?

  • 到專案下的 resources 目錄下 新建一個 banner.txt 即可。
  • 圖案可以到:https://www.bootschool.net/ascii 這個網站生成,然後拷貝到檔案中即可!

6、Spring Boot 起步依賴原理分析

  • 在spring-boot-starter-parent中定義了各種技術的版本資訊,組合了一套最優搭配的技術版本。

  • 在各種starter中,定義了完成該功能需要的座標合集,其中大部分版本資訊來自於父工程。

  • 我們的工程繼承parent,引入starter後,通過依賴傳遞,就可以簡單方便獲得需要的jar包,並且不會存在版本衝突等問題。

三、Spring Boot 配置 ymal 語法

3.1、Spring Boot 配置檔案概述

1、Spring Boot 使用一個全域性的配置檔案,配置檔案的名稱是固定的。

  • application.properties
    • 語法結構:key = value
  • application.yml
    • 語法結構:key 空格 value

2、配置檔案作用:

  • 修改 Spring Boot 自動配置的預設值,因為 Spring Boot 在底層都給我們配置好了。
  • 在同一級目錄下優先順序為:properties>yml > yaml

3.2、yaml 概述

  • YAML是 "YAML Ain't a Markup Language" (YAML不是一種標記語言)的遞迴縮寫。在開發的這種語言時,YAML 的意思其實是:"Yet Another Markup Language"(仍是一種標記語言)

  • 這種語言作為資料中心,而不是以標記語言為重點!**

  • 以前的配置檔案,大多數都是使用xml來配置;比如一個簡單的埠配置,我們來對比下yaml和xml

  • 傳統xml配置:

<server>
    <port>8081<port>
</server>
  • yaml配置:
server:
  prot: 8080

3.3、yaml 基礎語法

1、語法注意事項

  • 大小寫敏感
  • 資料值前邊必須有空格,作為分隔符
  • 使用縮排表示層級關係
  • 縮排時不允許使用Tab鍵,只允許使用空格(各個系統 Tab對應的 空格數目可能不同,導致層次混亂)。
  • 縮排的空格數目不重要,只要相同層級的元素左側對齊即可
  • ''#" 表示註釋,從這個字元一直到行尾,都會被解析器忽略。

2、配置 ymal 資料格式

  • 字面量:普通的值(數字、布林值、字串)
    • “ ” 雙引號,不會轉義字串裡面的特殊字元 , 特殊字元會作為本身想表示的意思【msg1: "hello \n world"】
    • ' ' 單引號,會轉義特殊字元 , 特殊字元最終會變成和普通字元一樣輸出【msg2: 'hello \n world'】
  • 物件(map):鍵值對的集合。
person:  
   name: zhangsan
# 行內寫法
person: {name: zhangsan}
  • 陣列(List、Set):一組按次序排列的值
address:
  - beijing
  - shanghai
# 行內寫法
address: [beijing,shanghai]
  • 引數引用
name: lisi 
person:
  name: ${name} # 引用上邊定義的name值

四、Spring Boot 配置

4.1、Spring Boot 獲取資料

1、方式一: @Value 或 Evironment

  • @Value
   #獲取普通配置
   @Value("${name}")
    private String name;
    #獲取物件屬性
    @Value("${person.name}")
    private String name2;
   	#獲取陣列
    @Value("${address[0]}")
    private String address1;
  	#獲取純量
    @Value("${msg1}")
    private String msg1;
  • Evironment
@Autowired
 private Environment env;
	System.out.println(env.getProperty("person.name"));
 	System.out.println(env.getProperty("address[0]"));

2、方式二:@ConfigurationProperties

  • @ConfigurationProperties
    • 注意prefix一定要寫
    • person:是配置檔案的名稱,配置檔案中書寫了相應屬性的值
@Date
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
    private String name;
    private int age;
    private String[] address;
}
  • @PropertySource :載入指定的配置檔案;

  • @configurationProperties:預設從全域性配置檔案中獲取值;

4.2、Spring Boot 多套環境切換 — profile

  • profile是用來完成不同環境下,配置動態切換功能的

  • profile配置方式

    ​ 多profile檔案方式:提供多個配置檔案,每個代表一種環境。

    ​ application-dev.properties/yml 開發環境

    ​ application-test.properties/yml 測試環境

    ​ application-pro.properties/yml 生產環境

    ​ yml多文件方式:

​ 在yml中使用 --- 分隔不同配置

  1. profile啟用方式
  • 配置檔案: 再配置檔案中配置:spring.profiles.active=dev
  • 虛擬機器引數:在VM options 指定:-Dspring.profiles.active=dev
  • 命令列引數:java –jar xxx.jar --spring.profiles.active=dev

4.3、SpringBoot配置-專案內部配置檔案載入順序

載入順序為上文的排列順序,高優先順序配置的屬性會生效

  • file:./config/:當前專案下的/config目錄下
  • file:./ :當前專案的根目錄
  • classpath:/config/:classpath的/config目錄
  • classpath:/ :classpath的根目錄

4.4、SpringBoot配置-專案外部配置載入順序

1.命令列

java -jar app.jar --name="Spring“ --server.port=9000

2.指定配置檔案位置

 java -jar myproject.jar --spring.config.location=e://application.properties

3.外部不帶profile的properties檔案

    classpath:/config/application.properties
    classpath:/application.properties

五、Spring Boot 整合

5.1、整合 Junit

1、搭建 Spring Boot 工程

2、引入 starter-test 起步依賴

 <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

3、編寫測試類

/**
 * 測試類
 */

@RunWith(SpringRunner.class)
@SpringBootTest(classes = SpringbootJunitApplication.class )
public class UserServiceTest {

    @Test
    public void test(){
        System.out.println(111);
    }
}

4、測試

5.2、整合 Mybatis

1、搭建 Spring Boot 工程

2、引入 mybatis 起步依賴,新增 mysql 驅動

<dependencies>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.0</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <!--<scope>runtime</scope>-->
        </dependency>
    </dependencies>

3、編寫DataSource和MyBatis相關配置

  • application.yml
# datasource
spring:
  datasource:
    url: jdbc:mysql:///springboot?serverTimezone=UTC
    username: root
    password: root
    driver-class-name: com.mysql.cj.jdbc.Driver


# mybatis
mybatis:
  mapper-locations: classpath:mapper/*Mapper.xml # mapper對映檔案路徑
  type-aliases-package: com.itheima.springbootmybatis.domain

  # config-location:  # 指定mybatis的核心配置檔案

4、定義表和實體類

5、編寫dao和mapper檔案/純註解開發

5.3、整合 Redis

1、搭建SpringBoot工程

2、引入redis起步依賴

  <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
    </dependencies>

3、配置redis相關屬性

spring:
  redis:
    host: 127.0.0.1 # redis的主機ip
    port: 6379

4、注入RedisTemplate模板

5、編寫測試方法,測試

@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringbootRedisApplicationTests {

    @Autowired
    private RedisTemplate redisTemplate;

    @Test
    public void testSet() {
        //存入資料
        redisTemplate.boundValueOps("name").set("zhangsan");
    }

    @Test
    public void testGet() {
        //獲取資料
        Object name = redisTemplate.boundValueOps("name").get();
        System.out.println(name);
    }

}

相關文章