參考文章
---------------------------------
1、SpringBoot根據腳本初始化
結構初始化腳本文件由spring.datasource.schema屬性指定,數據初始化腳本由文件spring.datasource.data屬性指定。
這兩個腳本是否執行的開關由spring.datasource.initialization-mode決定:always-一定執行,embedded-只對內存數據庫執行,never-不執行。
2、JPA根據類結構初始化
@Entity注解的類將會被初始化一張數據庫表。
是否執行的開關由spring.jpa.hibernate.ddl-auto屬性控制,可為create/update/create-drop/none/validate,其中none和validate為不執行。
3、初始化時對於另一個屬性spring.jpa.generate-dll在理解上的困惑
可以參考這篇文章---用屬性控制Hibernate生成DDL。
按照它的描述,spring.jpa.generate-dll是jpa層面對數據表生成策略的控制,而spring.jpa.hibernate.ddl-auto是jpa實現hibernate層面上對數據表生成策略的控制。
實踐也驗證了文章里所說的,spring.jpa.generate-dll比spring.jpa.hibernate.ddl-auto有更強的控制力度,即使spring.jpa.hibernate.ddl-auto為none,只要spring.jpa.generate-dll為true,也會根據@Entity注解的實體類生成對應數據表。
按照文章的建議,為了避免混淆和不好理解,這兩者最好不要混用,只對JPA實現層面的控制屬性spring.jpa.hibernate.ddl-auto進行設置即可。
4、讓SpringBoot根據腳本和讓JPA根據實體類進行初始化,兩者之中選擇一個即可。