75.3 使用Spring JDBC初始化数据库
Spring JDBC有一个初始化DataSource
特性,Spring Boot默认启用该特性,并从标准的位置schema.sql
和data.sql
(位于classpath根目录)加载SQL。此外,Spring Boot将加载schema-${platform}.sql
和data-${platform}.sql
文件(如果存在),在这里platform
是spring.datasource.platform
的值,比如,你可以将它设置为数据库的供应商名称(hsqldb
, h2
, oracle
, mysql
, postgresql
等)。Spring Boot默认启用Spring JDBC初始化快速失败特性,所以如果脚本导致异常产生,那应用程序将启动失败。脚本的位置可以通过设置spring.datasource.schema
和spring.datasource.data
来改变,如果设置spring.datasource.initialize=false
则哪个位置都不会被处理。
你可以设置spring.datasource.continue-on-error=true
禁用快速失败特性。一旦应用程序成熟并被部署了很多次,那该设置就很有用,因为脚本可以充当”可怜人的迁移”-例如,插入失败时意味着数据已经存在,也就没必要阻止应用继续运行。
如果你想要在一个JPA应用中使用schema.sql
,那如果Hibernate试图创建相同的表,ddl-auto=create-drop
将导致错误产生。为了避免那些错误,可以将ddl-auto
设置为“”(推荐)或none
。不管是否使用ddl-auto=create-drop
,你总可以使用data.sql
初始化新数据。