Liquibase:diff 总是生成索引
Posted
技术标签:
【中文标题】Liquibase:diff 总是生成索引【英文标题】:Liquibase: diff always generates indexes 【发布时间】:2018-02-11 15:19:03 【问题描述】:我使用 spring-boot 和 liquibase-maven-plugin 来根据我的类生成数据库更改,但是“mvn compile liquibase: diff”命令总是生成索引和外键的删除和包含,即使数据库已更新并且类没有变化(因此数据库中应该没有变化)。
有人知道这是否正确或如何避免吗?我只希望在项目的更改集中生成对数据库的新更改。
【问题讨论】:
我们在之前的工作中遇到过同样的问题,不是 liquibase,而是 spring-boot hibernate 默认配置 'ddl-auto'。这是产生这种不良行为的配置:docs.spring.io/spring-boot/docs/current/reference/html/… 请添加您的 pom.xml 请添加您正在使用的控制台日志和 pom.xml。 【参考方案1】:首先,我认为您缺少liquibase-hibernate4 maven 插件。
来自项目Readme.md
:
此扩展允许您将 Hibernate 配置用作 Liquibase 中 diff、diffChangeLog 和 generateChangeLog 的比较数据库。
这实际上意味着您可以使用它来将真实数据库与您的 java 实体进行比较,以生成新的变更日志。
正如项目 wiki 建议的那样,重要的是要记住,如果出现问题,您需要查看新的变更日志并手动修改它。
我还建议您阅读此article from Baeldung 解释:
您的pom.xml
应如下所示:
...
<dependencies>
...
<dependency>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-core</artifactId>
<version>3.4.1</version>
</dependency>
<dependency>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-maven-plugin</artifactId>
<version>3.4.1</version>
</dependency>
...
</dependencies>
...
<plugins>
...
<plugin>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-maven-plugin</artifactId>
<version>3.4.1</version>
<configuration>
<propertyFile>src/main/resources/liquibase.properties</propertyFile>
</configuration>
<dependencies>
<dependency>
<groupId>org.liquibase.ext</groupId>
<artifactId>liquibase-hibernate4</artifactId>
<version>3.5</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.1.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
<version>1.7.3.RELEASE</version>
</dependency>
</dependencies>
</plugin>
...
</plugins>
...
还有你的src/main/resources/liquibase.properties
:
url=jdbc:mysql://localhost:3306/your_db
username=your_user
password=your_pw
driver=com.mysql.jdbc.Driver #orYourDriver
outputChangeLogFile=src/main/resources/liquibase-outputChangeLog.xml
hibernate:spring:your.model.package?dialect=org.hibernate.dialect.MySQLDialect&hibernate.physical_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy&hibernate.implicit_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy
我不确定您使用的是哪种持久性存储,但请确保使用正确的驱动程序和数据源 URL。
配置完成后,你应该可以运行mvn liquibase:diffChangeLog
来生成新的更新日志了。
【讨论】:
以上是关于Liquibase:diff 总是生成索引的主要内容,如果未能解决你的问题,请参考以下文章
使用 mvn liquibase:diff 时如何禁用删除表和列?
总是运行带有 failOnError="false" 的 Liquibase changeSet?