springboot資料初始化

2021-10-01 10:26:41 字數 3170 閱讀 6390

我們常利用springboot資料初始化進行測試資料準備,或者專案啟動的資料準備等,下面來具體了解下配置的含義。

springboot2資料初始化配置如下

spring.datasource.initialization-mode = always

spring.datasource.schema = classpath:xx/schema.sql

spring.datasource.data = classpath:xx/data.sql

從以下兩方面來說明配置的含義

顯式指定資料來源

spring.datasource.url = jdbc:mysql:

spring.datasource.username = xx

spring.datasource.password = xx

以上是springboot1用spring.datasource.url/username/password指定資料來源;

springboot2將schema和data的資料來源分開來,要分別指定schema和data的資料來源屬性;

private list

schema;

private string schemausername;

private string schemapassword;

private list

data;

private string datausername;

private string datapassword;

不指定資料來源

不指定資料來源的話,會預設讀取專案中配置過的datasource例項作為資料來源;

注意如果只宣告了url,但沒有指定username和password,將會預設讀取專案中配置過的datasource例項作為資料來源;

schema.sql用於執行ddl語句,data.sql用於執行dml語句;

spring.datasource.schemaspring.datasource.data可以傳多個sql檔案;

在springboot1缺省會執行data和schema檔案,不需要顯式設定,顯式指定的預設設定為spring.datasource.initialized = true

在springboot2裡,必須要設定spring.datasource.initialization-mode為aways,因為其預設值不會執行data和schema檔案;

如果沒有配置data和schema檔案的話,會去找classpath路徑下的data和schema開頭的sql檔案執行;

可以參考以下springboot2原始碼

class

datasourceinitializer

if the schema was created

* @see datasourceproperties#getschema()

*/public

boolean

createschema()

string username =

this

.properties.

getschemausername()

; string password =

this

.properties.

getschemapassword()

;runscripts

(scripts, username, password);}

return

!scripts.

isempty()

;}/** * initialize the schema if necessary.

* @see datasourceproperties#getdata()

*/public

void

initschema()

string username =

this

.properties.

getdatausername()

; string password =

this

.properties.

getdatapassword()

;runscripts

(scripts, username, password);}

}private

boolean

isenabled()

if(mode == datasourceinitializationmode.embedded &&

!isembedded()

)return

true;}

private

boolean

isembedded()

catch

(exception ex)

}private list

getscripts

(string propertyname, list

resources, string fallback)

string platform =

this

.properties.

getplatform()

; list

fallbackresources =

newarraylist

<

>()

; fallbackresources.

add(

"classpath*:"

+ fallback +

"-"+ platform +

".sql");

fallbackresources.

add(

"classpath*:"

+ fallback +

".sql");

return

getresources

(propertyname, fallbackresources,

false);

}...

}

Spring Boot如何初始化資料

hibernate機制 classpath下的import.sql,l在ddl auto是create和create drop時自動執行,如果ddl auto設定為update就不合適,所以此選項不適用於生產環境 spring jdbc預設機制 data.sql 用 選擇時機執行 一般在fixtur...

spring boot初始化報錯

解決方法 將pom檔案中新增如下依賴 org.springframework.boot spring boot starter tomcat 1 234另,如果不行,嘗試再將下面依賴 org.springframework.boot spring boot starter 1 234改為 org.s...

Springboot啟動初始化資料,執行sql指令碼

純配置。最方便簡潔,是最優選擇。yml檔案 spring datasource schema classpath schema.sql data classpath data.sql initialization mode always再在resource目錄下新增schema.sql和data.s...