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

标签 java hibernate spring-boot ddl flyway

我想从我的 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 具有数据源初始化器功能。 Spring Boot 默认启用它并从标准位置schema.sql data.sql(在类路径的根目录中)加载 SQL。

此外,Spring Boot 将加载 schema-${platform}.sqldata-${platform}.sql 文件(如果存在),其中 platform 是spring.datasource.platform 的值,例如您可以选择将其设置为数据库的供应商名称(hsqldb、h2、oracle、mysql、postgresql 等)。

Spring Boot 默认启用 Spring JDBC 初始化程序的 fail-fast 特性,因此如果脚本导致异常,应用程序将无法启动。可以通过设置 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 - Loading Initial Data

关于java - 如何在生成数据库模式之后但在应用程序启动之前执行 sql 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44289433/

相关文章:

java - 如何从opencyc获取OWL文件?

java - 将 hibernate-validator 与 wicket 集成

java - JUnit 5 : Inject spring components to Extension (BeforeAllCallback/AfterAllCallback)

java - 嵌套异常是 com.microsoft.sqlserver.jdbc.SQLServerException :The server failed to resume the transaction

java - 如何处理过大的 Spring Batch 步骤执行上下文?

java - Struts 2 jquery sj :select and json result

java - Hibernate SchemaExport不生成sql脚本

Java Hibernate 标准多对一

spring - 如何从 Spring boot 应用程序的控制台中排除条件评估报告?

spring-boot - 如何发布jar到 Artifactory ?