<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Spring Boot 2.5 終于對數(shù)據(jù)源動刀了!

          共 5007字,需瀏覽 11分鐘

           ·

          2021-06-12 11:30



          數(shù)據(jù)源升級

          最近有看過《Spring Boot 2.5 重磅發(fā)布》一文的朋友應(yīng)該都知道,Spring Boot 2.5 有一個數(shù)據(jù)源的重大變動,那就是某些數(shù)據(jù)源初始化的方法被重新設(shè)計(jì)了,下面的數(shù)據(jù)源參數(shù)配置也被廢除了:

          spring.datasource.*

          新的數(shù)據(jù)源參數(shù)配置如下:

          spring.sql.init.*

          今天把項(xiàng)目升級到了 Spring Boot 2.5,再順便把 spring.datasource 也換成了 spring.sql.init:

          spring:
            sql.init:
              driver-class-name: com.mysql.cj.jdbc.Driver
              url: jdbc:mysql://localhost:3306/javastack
              username: root
              password: 12345678

          以為會很順利,啟動居然報(bào)錯:

          數(shù)據(jù)源參數(shù)不是被重命名了嗎,咋不行。。。

          看來新的數(shù)據(jù)源參數(shù)并沒有被識別,于是抱著懷疑的態(tài)度看了下 Spring Boot 2.5 數(shù)據(jù)源參數(shù)綁定類 DataSourceProperties 的源碼:

          數(shù)據(jù)源參數(shù)綁定前綴依然還是:spring.datasource!!!

          咦……怎么和我原先理解的不太一樣,有鬼了。。

          再注意看上圖左邊部分,有 4 個類被標(biāo)識廢除了,然后我再全局搜索了下新的參數(shù) spring.sql.init 在源碼中使用到的地方:

          可以看到一些數(shù)據(jù)源參數(shù)被拿到 SqlInitializationProperties 類去了。

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

          WC,差點(diǎn)被帶溝里了……

          初始化 SQL 數(shù)據(jù)庫

          好吧,既然清楚了,我們再來驗(yàn)證下新的 SQL 數(shù)據(jù)庫初始化機(jī)制,看看理解是否有錯。

          下面直接說重點(diǎn),Spring Boot 基礎(chǔ)框架就就不介紹了,不清楚的可以關(guān)注公眾號:Java技術(shù)棧,在后臺回復(fù):boot,我寫的一堆實(shí)戰(zhàn)教程都整理好了。

          添加數(shù)據(jù)源和 SQL 初始化參數(shù):

          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.*,更多初始化參數(shù)請參考這個類:

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

          新建對應(yīng)的創(chuàng)建表 SQL 文件:

          sql/create_t_javastack.sql

          CREATE TABLE IF NOT EXISTS `t_javastack`(
              `id` INT AUTO_INCREMENT,
              `title` VARCHAR(50) NOT NULL,
              `content` VARCHAR(100) NOT NULL,
              PRIMARY KEY ( `id` )
          );

          新建對應(yīng)的初始化表數(shù)據(jù) SQL 文件:

          sql/insert_t_javastack.sql

          insert into t_javastack(title, content) values
          ('標(biāo)題1''內(nèi)容1'),
          ('標(biāo)題2''內(nèi)容2'),
          ('標(biāo)題3''內(nèi)容3'),
          ('標(biāo)題4''內(nèi)容4'),
          ('標(biāo)題5''內(nèi)容5');

          OK,啟動正常,再來驗(yàn)證下表是否創(chuàng)建,數(shù)據(jù)是否插入:

          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 | 標(biāo)題1   | 內(nèi)容1   |
          |  2 | 標(biāo)題2   | 內(nèi)容2   |
          |  3 | 標(biāo)題3   | 內(nèi)容3   |
          |  4 | 標(biāo)題4   | 內(nèi)容4   |
          |  5 | 標(biāo)題5   | 內(nèi)容5   |
          +----+---------+---------+
          5 rows in set (0.00 sec)

          現(xiàn)在終于和我理解的一致了,你理解了嗎?

          這個功能可能在單元測試的時候有用到,生產(chǎn)環(huán)境是不太可能會用到的。

          總結(jié)

          Spring Boot 2.5 中的 spring.sql.init.* 是初始化 SQL 數(shù)據(jù)庫使用的新參數(shù)前綴,不再使用前綴 spring.datasource.* 了,后續(xù)版本會進(jìn)行移除,其實(shí)就是 DDL/DML 配置和數(shù)據(jù)源連接配置分家了。

          新的參數(shù)確實(shí)也更清楚明朗了,小伙伴們有用到 SQL 數(shù)據(jù)庫初始化功能的,升級 Spring Boot 2.5 時可以注意一下。有時候理論看再多,還不如實(shí)踐一次,實(shí)踐出真理,你以為你理解對了,其實(shí)不然。

          本文完整的的示例源碼已經(jīng)上傳:

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

          大家可以 Star 學(xué)習(xí)一下,Spring Boot 2.5 我還在慢慢踩坑中,后面會形成更多實(shí)戰(zhàn)干貨文章,關(guān)注公眾號Java技術(shù)棧第一時間推送。

          最后,大家覺得本文有用的話,動動小手,給棧長來個小小的在看、轉(zhuǎn)發(fā)唄,原創(chuàng)不易,需要你的鼓勵哦~

          版權(quán)申明:本文系公眾號 "Java技術(shù)棧" 原創(chuàng),原創(chuàng)實(shí)屬不易,轉(zhuǎn)載、引用本文內(nèi)容請注明出處,禁止抄襲、洗稿,請自重,尊重大家的勞動成果和知識產(chǎn)權(quán),抄襲必究。

          1、Intellij IDEA這樣 配置注釋模板,讓你瞬間高出一個逼格!
          2、吊炸天的 Docker 圖形化工具 Portainer,必須推薦給你!
          3、最牛逼的 Java 日志框架,性能無敵,橫掃所有對手!
          4、把Redis當(dāng)作隊(duì)列來用,真的合適嗎?
          5、驚呆了,Spring Boot居然這么耗內(nèi)存!你知道嗎?
          6、全網(wǎng)最全 Java 日志框架適配方案!還有誰不會?
          7、Spring中毒太深,離開Spring我居然連最基本的接口都不會寫了

          點(diǎn)分享

          點(diǎn)收藏

          點(diǎn)點(diǎn)贊

          點(diǎn)在看

          瀏覽 42
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲操小逼 | 日韩欧美国产精品综合嫩V | 资优生的性爱大对决 | 操逼网站视频 | 欧美人操逼 |