如果您确信您的脚本正确反映了数据库中“应该”的内容,请运行 liquibase:clearCheckSums maven 目标,这将清除所有内容。
简短回答:由于某种原因更改行分隔符可能会导致校验和验证错误,并且在代码中不可见 变化。为什么它会发生在我身上?请阅读下文..
假设你有一台tomcat服务器,时不时会有多人参与WAR部署。每个人都在 LINUX 上使用 INTELLIJ IDEA,但其中一位团队成员由于某种原因切换到 WINDOWS。 现在,当 WINDOWS 人员创建 WAR 时,他可能没有注意到 INTELLIJ IDEA for WINDOWS 中的默认行分隔符选择是 CRLF,但所有以前的版本都是从使用 LF 行分隔符的 LINUX 机器构建的。
行分隔符的更改会影响所有文本文件,其中也包括 SQL 文件。所以你可能在你的 liquibase 脚本中像我的团队一样使用了以下内容
changeSet(author: "aditya", id: "1335831637231-1") {
sqlFile( path: "liquibase/quartz_oracle_tables.sql", "stripComments": true)
}
并且文件的校验和与数据库中已存储的校验和不匹配,从而引发校验和验证错误。
将所有变更日志写入数据库表。 转到
DATABASECHANGELOG表并手动删除更改日志。
重要!,liquibase 有一个 liquibase 有一个 changlog.xml 文件
<project ...>
<plugins>
<plugin>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-maven-plugin</artifactId>
<version>*****</version>
<configuration>
<changeLogFile>src/main/resources/mychangelogfile.xml</changeLogFile>
<driver>oracle.jdbc.driver.OracleDriver</driver>
<url>jdbc:oracle:thin:@//X.X.X.X:PORT/XE</url>
<username>yourusername</username>
<password>password</password>
</configuration>
<executions>
<execution>
<goals>
<goal>clearCheckSums</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</project>
**** 我用的版本是3.2.0 在 url 中替换为正确的 IPADDRESS 和 PORT。
你终于跑了
mvn liquibase:clearCheckSums
希望有帮助!
现在有第二个选项
The <validCheckSum> attribute
The second option is to add a <validCheckSum> element to the changeset. The text contents of the element should contain the old checksum from the error message.
假设您很少需要更改历史变更日志 XML 文件,那么您很少会收到错误消息。如果您收到错误消息,请添加一个带有旧校验和的标签,确认没有问题。
示例:
<changeSet id="example" author="former-author" runOnChange="false">
<validCheckSum>8:869....4e3</validCheckSum>
<addColumn tableName="ye_olde_db_table">
<!-- fix some old typo or incompatibility, etc -->
</addColumn>
</changeSet>
像这样:
<plugin>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-maven-plugin</artifactId>
<version>${liquibase.version}</version>
<configuration>
<changeLogFile>${project.basedir}/src/main/resources/config/liquibase/master.xml</changeLogFile>
<driver>com.mysql.cj.jdbc.Driver</driver>
<url>jdbc:mysql://localhost:3306/hos_gateway</url>
<username>root</username>
<password>root</password>
<referenceUrl>hibernate:spring:com.hos.physician.domain?dialect=org.hibernate.dialect.MySQL5InnoDBDialect&hibernate.physical_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy&hibernate.implicit_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy</referenceUrl>
<verbose>true</verbose>
<logging>debug</logging>
<contexts>!test</contexts>
</configuration>
</plugin>
<changeSet id=
数据库更改日志:
更改集: ID:1.0.xx