一、簡介
我們使用SpringBoot + JPA時,需要程序在啟動時執行數據表的初始化或者數據庫記錄的初始化。一般數據表的初始化可以通過在Spring Boot的application.properties中進行配置spring.jpa.hibernate.ddl-auto=update來實現。但是數據記錄的初始化,該怎么做呢?
下面,我們將使用SpringBoot2.0.4Release版本做實驗
二、配置application.properties
連接字符串角配置:
#連接字符串 spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql://172.16.4.203:3306/mydatabase?characterEncoding=utf8&useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai spring.datasource.username=root spring.datasource.password=123456 spring.jpa.show-sql=true spring.jpa.generate-ddl=true spring.jpa.hibernate.ddl-auto=update spring.datasource.platform=org.hibernate.dialect.MySQL57Dialect
初始化數據:
#初始化數據 spring.datasource.schema=classpath:schema.sql spring.datasource.data=classpath:data.sql spring.datasource.sql-script-encoding=utf-8 spring.datasource.initialization-mode=ALWAYS
三、說明
因為SpringBoot在啟動時,只有檢測到spring.datasource.initialization-mode=ALWAYS配置,后再檢測spring.datasource.schema之后,且配置的sql角本命令不為空,才會去執行schema和spring.datasource.data。因此需要在scheme.sql中隨便寫一句sql語句。
schema.sql
-- 這里是定義數據結構的SQL,每次運行都會執行,此文件不能為空,必須至少寫一句Sql語句。 show tables;
data.sql
-- 下列角本是同步服務系統每次啟動會自動執行的角本。編寫時,請注意確保角本中不會變更現有記錄。 -- SettingTab INSERT setting_tab(id,name,value,description) SELECT 1, 'name', 'admin','用戶名' FROM dual WHERE not EXISTS (select 1 from setting_tab where setting_tab.id = 1); INSERT setting_tab(id,name,value,description) SELECT 2, 'key', '123456','密鑰' FROM dual WHERE not EXISTS (select 1 from setting_tab where setting_tab.id=2);