spring_reference/IX. ‘How-to’ guides/68.3. Initialize a database...

1.4 KiB
Raw Blame History

68.3. 使用Spring JDBC初始化数据库

Spring JDBC有一个DataSource初始化特性。Spring Boot默认启用了该特性并从标准的位置schema.sql和data.sql位于classpath根目录加载SQL。此外Spring Boot将加载schema-${platform}.sqldata-${platform}.sql文件如果存在在这里platform是spring.datasource.platform的值比如你可以将它设置为数据库的供应商名称hsqldb, h2, oracle, mysql, postgresql等。Spring Boot默认启用Spring JDBC初始化快速失败特性所以如果脚本导致异常产生那应用程序将启动失败。脚本的位置可以通过设置spring.datasource.schemaspring.datasource.data来改变,如果设置spring.datasource.initialize=false则哪个位置都不会被处理。

你可以设置spring.datasource.continueOnError=true禁用快速失败特性。一旦应用程序成熟并被部署了很多次,那该设置就很有用,因为脚本可以充当"可怜人的迁移"-例如,插入失败时意味着数据已经存在,也就没必要阻止应用继续运行。

如果你想要在一个JPA应用中使用schema.sql那如果Hibernate试图创建相同的表ddl-auto=create-drop将导致错误产生。为了避免那些错误,可以将ddl-auto设置为“”推荐或“none”。不管是否使用ddl-auto=create-drop你总可以使用data.sql初始化新数据。