环境信息
Spring Boot 2.0.3, Windows 7, JPA, Spring Data, MySQL
需求
虽然JPA和Hibernate底层提供了强大的支持,但是在实际开发中,仍然会有需要自定义数据表和初始化数据的需求,对于这个需求,Spring Boot也提供了相应的支持,只是对于这个需求是有一定的前提条件和约束的,换句话说,这些SQL script只能在特定设置和场景下使用。
使用场景和约束
对于数据库的schema和初始化数据是不能无限制地进行执行的,只能对于干净的数据化,或者每次都从0开始创建和执行的应用才适用。
方案1, 基于import.sql
在application.properties中的设置项:
spring.jpa.hibernate.ddl-auto: create/create-drop
适用于初次适用或者每次重新创建的情况。
sql 脚本的指定:
spring.jpa.properties.hibernatel.hbmddl.import_files=file1.sql,file2.sql
默认的路径为classpath下的sql文件。
方案2:基于schema和data的sql脚本
在application.properties下的设置项:
spring.datasource.initialization-mode=ALWAYS
spring.jpa.hibernate.ddl-auto=none
## default; false
spring.jpa.generate-ddl=false
## 指定sql文件
spring.datasource.data=classpath:sql/data-@database.type@.sql
spring.datasource.schema=classpath:sql/schema-@database.type@.sql
这里两个sql文件都是需要进行指定的,否则就会提示错误或者没有提示。
例如: sql文件为空,会提示错误信息
如果注释掉schema.sql文件,则不会提示错误信息,但是什么都不会发生。
总结
这些初始化的脚本都只能执行一次,然后就需要重新更改设置。或者将dll-auto设置为create-drop每次都重新开始。