我們常利用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:以上是springboot1用spring.datasource.username = xx
spring.datasource.password = xx
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.schema
和spring.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...