欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

前言

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

JPA映射初始化

如果我們?cè)陧?xiàng)目中用到了jpa,那就初始化數(shù)據(jù)庫表結(jié)構(gòu)就比較簡(jiǎn)單,因?yàn)槲覀兊念惥完P(guān)聯(lián)的表名和字段,我們可以通過配置:

spring.jpa.generate-ddl = true

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

# none:不處理
# validate:只校驗(yàn)表是否和實(shí)體類對(duì)應(yīng)
# update:更新表結(jié)構(gòu),但是它只會(huì)新增,不會(huì)刪除
# create:先drop再創(chuàng)建
# create-drop:和create不同的是應(yīng)用關(guān)閉時(shí)會(huì)drop表,一般會(huì)在單元測(cè)試時(shí)使用
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了,不要混用兩個(gè)配置。

初始化腳本

上面所說的數(shù)據(jù)庫初始化依賴于我們的ORM框架,而且它只能初始化表結(jié)構(gòu),如果有數(shù)據(jù)需要初始化就無法實(shí)現(xiàn)了,SpringBoot也考慮到了這一點(diǎn),因此我們還可以能過初始化腳本來進(jìn)行數(shù)據(jù)庫初始化,比如我們定義一個(gè)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,那么我們就可以通過配置來在項(xiàng)目啟動(dòng)時(shí),自動(dòng)執(zhí)行上面的SQL腳本:

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

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

@Sql注解

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

總結(jié)

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

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

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

相關(guān)文章

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

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

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

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

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

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

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

    Java 多線程之兩步掌握

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

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

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

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

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

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

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

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

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

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

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

    簡(jiǎn)單了解如何在spring中使用RabbitMQ

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

最新評(píng)論