使用Liquibase和Spring Boot

时间:2017-08-12 06:06:29

标签: spring liquibase liquibase-hibernate

我有一个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 目标。在这种情况下,我的网址是" hibernate:spring:myBasePackage.myEntityPackage?dialect = org.hibernate.dialect.H2Dialect "使用驱动程序" liquibase.ext.hibernate.database.connection.HibernateDriver 。在这种情况下,我收到错误" 无法解析持久性单位根URL:类路径资源[]无法解析为URL,因为它不存在"。这个错误可以在Spring和Liquibase问题跟踪器中找到,但似乎总是说这个错误已经修复了。
  • 我的第三种方法基本上与第二种方法相似,但在这种情况下,我使用的是" hibernate:classic "具有" CustomClassicConfigurationFactory "的实现的url,它显式注册我的注释类。这确实有效。但是,在这种情况下,我必须在我的应用程序jar中执行此操作。我必须添加我的application-jar作为maven-plugin的依赖项。因此,在生成更改日志之前,我必须构建我的应用程序jar(并将其安装到本地Maven存储库)。这似乎很麻烦。

我的问题是:

  • 在基于Spring引导的应用程序中,是否有更简单的方法为JPA实体生成更改日志?
  • 为什么前两种方法不起作用?
  • 有没有办法简化第三种方法?

我正在使用:

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

非常感谢提前。

1 个答案:

答案 0 :(得分:0)

在使用liquibase:diff的第一种方法中,将不会生成实体的更改集(创建表更改集),因为liquibase不会将新的jpa实体假定为更改。 / p>

在第二种方法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/

处查看其他属性