gpt4 book ai didi

spring - 使用 Liquibase 和 Spring Boot

转载 作者:行者123 更新时间:2023-12-01 14:46:05 24 4
gpt4 key购买 nike

我有一个 Spring Boot 应用程序,想使用 Liquibase 为我的 JPA 实体生成变更日志。但是,我遇到了不同的问题,具体取决于我的方法。

  • 我的第一个方法是使用 maven 插件的 diff 目标。该 url 是我的带有 H2 驱动程序的 H2 开发数据库,​​引用 URL 类似于“hibernate:spring:myBasePackage.myEntityPackage?dialect=org.hibernate.dialect.H2Dialect”,带有驱动程序“liquibase.ext.hibernate.database.connection.HibernateDriver”。在那种情况下,Liquibase 似乎可以识别我的实体,但会将差异打印到控制台。此外,差异没有更新日志文件的形式。
  • 我的第二种方法是使用 maven 插件的 generateChangeLog 目标。在这种情况下,我的 url 是“hibernate:spring:myBasePackage.myEntityPackage?dialect=org.hibernate.dialect.H2Dialect”,驱动程序是“liquibase.ext.hibernate.database.connection.HibernateDriver” 。在这种情况下,我收到错误“无法解析持久性单元根 URL:类路径资源 [] 无法解析为 URL,因为它不存在”。此错误可能是在 Spring 和 Liquibase 问题跟踪器中都发现了,但似乎总是说这个错误已经修复。
  • 我的第三种方法基本上与第二种方法类似,但在这种情况下,我使用了一个“hibernate:classic”url 和一个“CustomClassicConfigurationFactory”的实现,它注册了我的注释类明确。这确实有效。但是,在这种情况下,我必须在我的应用程序 jar 中执行此操作。我必须添加我的应用程序 jar 作为 maven 插件的依赖项。因此,在生成变更日志之前,我必须构建我的应用程序 jar(并将其安装到本地 Maven 存储库)。这似乎很麻烦。

我的问题是:

  • 有没有一种更简单的方法可以在基于 Spring boot 的应用程序中为 JPA 实体生成变更日志?
  • 为什么前两种方法不起作用?
  • 有没有办法简化第三种方法?

我正在使用:

  • Spring Boot 1.5.4.RELEASE
  • Liquibase-Hibernate4 3.6
  • Liquibase 3.5.3

非常感谢。

最佳答案

在使用 liquibase:diff 的第一种方法中,不会生成实体的更改集(创建表更改集),因为 liquibase 不假设新的 jpa 实体作为变化。

在第二种方法 generateChangeLog 中,它从给定的数据库生成更改日志。它不会查看您的 jpa 实体。

为了为您的 jpa 实体生成 ddl 脚本,只需将以下内容提交到您的 jpa 属性

<property key="javax.persistence.schema-generation.scripts.action">drop-and-create</property>
<property key="javax.persistence.schema-generation.scripts.create-target">./ddl/create.sql</property>
<property key="javax.persistence.schema-generation.scripts.drop-target">./ddl/drop.sql</property>

上面会生成脚本到根文件夹下的ddl文件夹

您可以在此处查看其他属性 https://thoughts-on-java.org/standardized-schema-generation-data-loading-jpa-2-1/

关于spring - 使用 Liquibase 和 Spring Boot,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45647088/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com