SpringBoot自動初始化數(shù)據(jù)庫的方法分享
前言
我們在項目中應該經(jīng)常遇到過初始化數(shù)據(jù)的場景,特別是項目部署或者交付的時候,需要建表、初始化數(shù)據(jù)等,那我們一般可能在部署前,提前在DB中執(zhí)行SQL,那么有什么方式可以在項目啟動的時候自動初始化數(shù)據(jù)庫呢?SpringBoot為我們提供了幾種快捷的方式。
JPA映射初始化
如果我們在項目中用到了jpa,那就初始化數(shù)據(jù)庫表結構就比較簡單,因為我們的類就關聯(lián)的表名和字段,我們可以通過配置:
spring.jpa.generate-ddl = true
來開啟自動生成DDL,又或者直接指定hibernate配置:
# none:不處理
# validate:只校驗表是否和實體類對應
# update:更新表結構,但是它只會新增,不會刪除
# create:先drop再創(chuàng)建
# create-drop:和create不同的是應用關閉時會drop表,一般會在單元測試時使用
spring.jpa.hibernate.ddl-auto = none / validate / update / create / create-drop
spring.jpa.hibernate.ddl-auto的默認值是變化的,如果我們用了內(nèi)嵌數(shù)據(jù)庫,那么默認值是create-drop,如果沒有,那么就是none,即不做任何操作。
如果我們指定了spring.jpa.hibernate.ddl-auto那么就沒有必要再使用spring.jpa.generate-ddl了,不要混用兩個配置。
初始化腳本
上面所說的數(shù)據(jù)庫初始化依賴于我們的ORM框架,而且它只能初始化表結構,如果有數(shù)據(jù)需要初始化就無法實現(xiàn)了,SpringBoot也考慮到了這一點,因此我們還可以能過初始化腳本來進行數(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 '用戶';
-- 插入默認用戶
INSERT IGNORE INTO t_user (name, age, description) VALUES ('admin', 10, '');腳本名稱為:schema-mysql.sql,那么我們就可以通過配置來在項目啟動時,自動執(zhí)行上面的SQL腳本:
# 指定對應的數(shù)據(jù)庫平臺,可以取值all或者指定的平臺 spring.sql.init.platform = mysql # 指定SQL初始化模式,取值always / never / embedded # embedded則是只在使用嵌入式DB時才執(zhí)行 # 如果不需要執(zhí)行初始化腳本,那么可以設置值為 never spring.sql.init.mode = always
SpringBoot在啟動時,會自動在classpath下尋找schema-${platform}.sql或data-${platform}.sql文件并執(zhí)行。
@Sql注解
這種方式只能用于單元測試,在單元測試時通過@Sql注解來指定測試前后需要執(zhí)行的腳本,具體可以查看:《SpringBoot單元測試實踐——數(shù)據(jù)隔離篇》
總結
上面介紹了幾種SpringBoot中在項目運行前初始化數(shù)據(jù)庫的方式,那么我們在實際生產(chǎn)環(huán)境中會使用嗎?我的回答是看場景:
- 一般情況下,不會使用,因為如果是一個長期運行的服務,除了第一次部署需要初始化,后續(xù)更多的是表結構的變更,比如增加、刪除字段,那么對于這種操作,是比較謹慎的,特別是大表,更多的是采用在線改表的方式進行。
- 但是對于一些特定的場景還是有價值的,比如乙方的項目交付,我一個項目可能需要交付給很多地方,而且后續(xù)也沒什么變更,那么通過這種方式可以簡化部署流程。
- 還有一種場景是邊緣部署,可能我們的項目需要在邊緣側部署,可能部署的數(shù)量也非常多,且是持續(xù)的,那么使用這種方式也可以提升效率,簡化流程。
到此這篇關于SpringBoot自動初始化數(shù)據(jù)庫的方法分享的文章就介紹到這了,更多相關SpringBoot初始化數(shù)據(jù)庫內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
windows系統(tǒng)使用mvn命令打包并指定jdk路徑方式
這篇文章主要介紹了windows系統(tǒng)使用mvn命令打包并指定jdk路徑方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-04-04
java統(tǒng)計文件中每個字符出現(xiàn)的個數(shù)
這篇文章主要為大家詳細介紹了java統(tǒng)計文件中每個字符出現(xiàn)的個數(shù),具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-03-03

