繁体   English   中英

如何在数据库模式生成之后但在应用程序启动之前执行 sql 脚本

[英]How to execute sql script after db schema generation but before application startup

我想从我的 Java 类生成数据库结构

jpa.generate-ddl: true
jpa.ddl-auto: true

此外,我需要在应用程序启动之前运行 SQL 脚本,因为我有使用这些数据的@PostConstruct方法。

你能举例说明如何在 Spring Boot 中做到这一点吗?

可以在以下位置找到具有所需功能的简单 Spring Boot 应用程序。 https://github.com/salilotr89/Spring-boot-postgres-dbinit

Spring JDBC 有一个 DataSource 初始化器特性。 Spring Boot 默认启用它并从标准位置schema.sqldata.sql(在类路径的根目录中)加载 SQL。

此外,Spring Boot 将加载schema-${platform}.sqldata-${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 应用程序(使用 Hibernate)中使用 schema.sql 初始化,那么如果 Hibernate 尝试创建相同的表,则 ddl-auto=create-drop 将导致错误。 为避免这些错误,将 ddl-auto 显式设置为“”(首选)或“无”。 无论您是否使用 ddl-auto=create-drop,您始终可以使用 data.sql 来初始化新数据。

http://docs.spring.io/spring-boot/docs/current/reference/html/howto-database-initialization.html

供参考: Spring Boot - 加载初始数据

您需要做的就是将一个名为data.sql的文件放置在application.properties文件所在的资源文件夹中。

该文件内的任何查询都将在应用程序启动之前和数据库创建之后执行。

要了解更多信息,请检查此链接http://www.baeldung.com/spring-boot-data-sql-and-schema-sql

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM