一、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中使用 --- 分隔不同配置
- 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);
}
}