天天看點

Spring Boot 2.5 終于對資料源動刀了!

spring.datasource.*

新的資料源參數配置如下:

spring.sql.init.*

今天把項目更新到了 Spring Boot 2.5,再順便把 spring.datasource 也換成了 spring.sql.init:

Spring Boot 2.5 終于對資料源動刀了!

以為會很順利,啟動居然報錯:

Spring Boot 2.5 終于對資料源動刀了!

資料源參數不是被重命名了嗎,咋不行。。。

看來新的資料源參數并沒有被識别,于是抱着懷疑的态度看了下 Spring Boot 2.5 資料源參數綁定類 DataSourceProperties 的源碼:

Spring Boot 2.5 終于對資料源動刀了!
Spring Boot 2.5 終于對資料源動刀了!
Spring Boot 2.5 終于對資料源動刀了!

從廢除的幾個類,再到新參數使用到的幾個新類,它們都指向的是初始化 SQL 資料庫(比如:建立一張表、初始化表資料),而不是初始化資料源(和資料庫建立連接配接池),這是兩個概念,前者需要依賴後者完成。。

WC,差點被帶溝裡了……

初始化 SQL 資料庫

好吧,既然清楚了,我們再來驗證下新的 SQL 資料庫初始化機制,看看了解是否有錯。

下面直接說重點,Spring Boot 基礎架構就就不介紹了,不清楚的可以關注公衆号:Java技術棧,在背景回複:boot,我寫的一堆實戰教程都整理好了。

添加資料源和 SQL 初始化參數:

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/javastack
    username: root
    password: 12345678
  sql.init:
    schemaLocations:
      - classpath:sql/create_t_javastack.sql
    dataLocations:
      - classpath:sql/insert_t_javastack.sql      

注意上面的 sql.init.*,更多初始化參數請參考這個類:

org.springframework.boot.autoconfigure.sql.init.SqlInitializationProperties

建立對應的建立表 SQL 檔案:

sql/create_t_javastack.sql

Spring Boot 2.5 終于對資料源動刀了!
mysql> desc t_javastack;
+---------+--------------+------+-----+---------+----------------+
| Field   | Type         | Null | Key | Default | Extra          |
+---------+--------------+------+-----+---------+----------------+
| id      | int          | NO   | PRI | NULL    | auto_increment |
| title   | varchar(50)  | NO   |     | NULL    |                |
| content | varchar(100) | NO   |     | NULL    |                |
+---------+--------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

mysql> select * from t_javastack;
+----+---------+---------+
| id | title   | content |
+----+---------+---------+
|  1 | 标題1   | 内容1   |
|  2 | 标題2   | 内容2   |
|  3 | 标題3   | 内容3   |
|  4 | 标題4   | 内容4   |
|  5 | 标題5   | 内容5   |
+----+---------+---------+
5 rows in set (0.00 sec)      

現在終于和我了解的一緻了,你了解了嗎?

這個功能可能在單元測試的時候有用到,生産環境是不太可能會用到的。

總結

Spring Boot 2.5 中的 spring.sql.init.* 是初始化 SQL 資料庫使用的新參數字首,不再使用字首 spring.datasource.* 了,後續版本會進行移除,其實就是 DDL/DML 配置和資料源連接配接配置分家了。

新的參數确實也更清楚明朗了,小夥伴們有用到 SQL 資料庫初始化功能的,更新 Spring Boot 2.5 時可以注意一下。有時候理論看再多,還不如實踐一次,實踐出真理,你以為你了解對了,其實不然。

本文完整的的示例源碼已經上傳:

https://github.com/javastacks/spring-boot-best-practice

大家可以 Star 學習一下,Spring Boot 2.5 我還在慢慢踩坑中,後面會形成更多實戰幹貨文章,關注公衆号Java技術棧第一時間推送。

最後,大家覺得本文有用的話,動動小手,給棧長來個小小的在看、轉發呗,原創不易,需要你的鼓勵哦~

版權申明:本文系公衆号 "Java技術棧" 原創,原創實屬不易,轉載、引用本文内容請注明出處,禁止抄襲、洗稿,請自重,尊重大家的勞動成果和知識産權,抄襲必究。