亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

SpringBoot自動初始化數(shù)據(jù)庫的方法分享

 更新時間:2023年08月23日 14:05:50   作者:噠噠噠打代碼  
我們在項目中應(yīng)該經(jīng)常遇到過初始化數(shù)據(jù)的場景,特別是項目部署或者交付的時候,那么有什么方式可以在項目啟動的時候自動初始化數(shù)據(jù)庫呢,下面小編就來和大家分享幾個方法吧

前言

我們在項目中應(yīng)該經(jīng)常遇到過初始化數(shù)據(jù)的場景,特別是項目部署或者交付的時候,需要建表、初始化數(shù)據(jù)等,那我們一般可能在部署前,提前在DB中執(zhí)行SQL,那么有什么方式可以在項目啟動的時候自動初始化數(shù)據(jù)庫呢?SpringBoot為我們提供了幾種快捷的方式。

JPA映射初始化

如果我們在項目中用到了jpa,那就初始化數(shù)據(jù)庫表結(jié)構(gòu)就比較簡單,因為我們的類就關(guān)聯(lián)的表名和字段,我們可以通過配置:

spring.jpa.generate-ddl = true

來開啟自動生成DDL,又或者直接指定hibernate配置:

# none:不處理
# validate:只校驗表是否和實體類對應(yīng)
# update:更新表結(jié)構(gòu),但是它只會新增,不會刪除
# create:先drop再創(chuàng)建
# create-drop:和create不同的是應(yīng)用關(guān)閉時會drop表,一般會在單元測試時使用
spring.jpa.hibernate.ddl-auto = none / validate / update / create / create-drop

spring.jpa.hibernate.ddl-auto的默認(rèn)值是變化的,如果我們用了內(nèi)嵌數(shù)據(jù)庫,那么默認(rèn)值是create-drop,如果沒有,那么就是none,即不做任何操作。

如果我們指定了spring.jpa.hibernate.ddl-auto那么就沒有必要再使用spring.jpa.generate-ddl了,不要混用兩個配置。

初始化腳本

上面所說的數(shù)據(jù)庫初始化依賴于我們的ORM框架,而且它只能初始化表結(jié)構(gòu),如果有數(shù)據(jù)需要初始化就無法實現(xiàn)了,SpringBoot也考慮到了這一點,因此我們還可以能過初始化腳本來進(jìn)行數(shù)據(jù)庫初始化,比如我們定義一個SQL腳本如下:

CREATE TABLE IF NOT EXISTS t_user
(
    id bigint auto_increment primary key comment 'id',
    name        varchar(64)  default '' not null comment '姓名',
    age         int          default 0    not null comment '年齡',
    description varchar(128) default ''   not null comment '描述',
)
COMMENT '用戶';
-- 插入默認(rèn)用戶
INSERT IGNORE INTO t_user (name, age, description) VALUES ('admin', 10, '');

腳本名稱為:schema-mysql.sql,那么我們就可以通過配置來在項目啟動時,自動執(zhí)行上面的SQL腳本:

# 指定對應(yīng)的數(shù)據(jù)庫平臺,可以取值all或者指定的平臺
spring.sql.init.platform = mysql
# 指定SQL初始化模式,取值always / never / embedded 
# embedded則是只在使用嵌入式DB時才執(zhí)行
# 如果不需要執(zhí)行初始化腳本,那么可以設(shè)置值為 never
spring.sql.init.mode = always

SpringBoot在啟動時,會自動在classpath下尋找schema-${platform}.sqldata-${platform}.sql文件并執(zhí)行。

@Sql注解

這種方式只能用于單元測試,在單元測試時通過@Sql注解來指定測試前后需要執(zhí)行的腳本,具體可以查看:《SpringBoot單元測試實踐——數(shù)據(jù)隔離篇》

總結(jié)

上面介紹了幾種SpringBoot中在項目運行前初始化數(shù)據(jù)庫的方式,那么我們在實際生產(chǎn)環(huán)境中會使用嗎?我的回答是看場景:

  • 一般情況下,不會使用,因為如果是一個長期運行的服務(wù),除了第一次部署需要初始化,后續(xù)更多的是表結(jié)構(gòu)的變更,比如增加、刪除字段,那么對于這種操作,是比較謹(jǐn)慎的,特別是大表,更多的是采用在線改表的方式進(jìn)行。
  • 但是對于一些特定的場景還是有價值的,比如乙方的項目交付,我一個項目可能需要交付給很多地方,而且后續(xù)也沒什么變更,那么通過這種方式可以簡化部署流程。
  • 還有一種場景是邊緣部署,可能我們的項目需要在邊緣側(cè)部署,可能部署的數(shù)量也非常多,且是持續(xù)的,那么使用這種方式也可以提升效率,簡化流程。

到此這篇關(guān)于SpringBoot自動初始化數(shù)據(jù)庫的方法分享的文章就介紹到這了,更多相關(guān)SpringBoot初始化數(shù)據(jù)庫內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • RocketMQ消息過濾與查詢的實現(xiàn)

    RocketMQ消息過濾與查詢的實現(xiàn)

    這篇文章主要介紹了RocketMQ消息過濾與查詢的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • SpringBoot優(yōu)雅接收前端請求參數(shù)的詳細(xì)過程

    SpringBoot優(yōu)雅接收前端請求參數(shù)的詳細(xì)過程

    這篇文章主要介紹了SpringBoot如何優(yōu)雅接收前端請求參數(shù),我們可以通過@RequestParm注解去綁定請求中的參數(shù),將(查詢參數(shù)或者form表單數(shù)據(jù))綁定到controller的方法參數(shù)中,本文結(jié)合示例代碼給大家講解的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • Springboot主程序類注解配置過程圖解

    Springboot主程序類注解配置過程圖解

    這篇文章主要介紹了Springboot主程序類注解配置過程圖解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-10-10
  • Java 多線程之兩步掌握

    Java 多線程之兩步掌握

    Java 多線程編程 Java給多線程編程提供了內(nèi)置的支持。一條線程指的是進(jìn)程中一個單一順序的控制流,一個進(jìn)程中可以并發(fā)多個線程,每條線程并行執(zhí)行不同的任務(wù)
    2021-10-10
  • Spring自動裝配之方法、構(gòu)造器位置的自動注入操作

    Spring自動裝配之方法、構(gòu)造器位置的自動注入操作

    這篇文章主要介紹了Spring自動裝配之方法、構(gòu)造器位置的自動注入操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • SpringBoot項目從18.18M瘦身到0.18M的實現(xiàn)

    SpringBoot項目從18.18M瘦身到0.18M的實現(xiàn)

    本文主要介紹了SpringBoot項目從18.18M瘦身到0.18M的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • SpringCloud中的Feign服務(wù)間的調(diào)用詳解

    SpringCloud中的Feign服務(wù)間的調(diào)用詳解

    這篇文章主要介紹了SpringCloud中的Feign服務(wù)間的調(diào)用詳解,Feign 是一個聲明式的 REST 客戶端,它能讓 REST 調(diào)用更加簡單,Feign 供了 HTTP 請求的模板,通過編寫簡單的接口和插入注解,就可以定義好 HTTP 請求的參數(shù)、格式、地址等信息,需要的朋友可以參考下
    2024-01-01
  • Spring 單元測試中如何進(jìn)行 mock的實現(xiàn)

    Spring 單元測試中如何進(jìn)行 mock的實現(xiàn)

    這篇文章主要介紹了Spring 單元測試中如何進(jìn)行 mock的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • 并行Stream與Spring事務(wù)相遇會發(fā)生什么?

    并行Stream與Spring事務(wù)相遇會發(fā)生什么?

    這篇文章主要介紹了并行Stream與Spring事務(wù)相遇會發(fā)生什么?文章主要解決實戰(zhàn)中的Bug及解決方案和技術(shù)延伸,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-05-05
  • 簡單了解如何在spring中使用RabbitMQ

    簡單了解如何在spring中使用RabbitMQ

    這篇文章主要介紹了簡單了解如何在spring中使用RabbitMQ,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-12-12

最新評論