1

我需要通过 ant 和 spring 执行相同的 db-changelog。我希望 ant 会运行更新日志,当 spring 运行时,它不会做任何事情,只是正常停止。Ant 成功运行 db-changelog,然后 spring 运行,但它抛出异常,这是堆栈跟踪的一部分:

原因:liquibase.exception.JDBCException:执行 SQL CREATE TABLE 操作时出错(action_id int8 NOT NULL,action_name VARCHAR(255),version_no int8,reason_required BOOLEAN,comment_required BOOLEAN,step_id int8,CONSTRAINT action_pkey PRIMARY KEY (action_id)):原因:执行 SQL CREATE TABLE 操作时出错(action_id int8 NOT NULL,action_name VARCHAR(255),version_no int8,reason_required BOOLEAN,comment_required BOOLEAN,step_id int8,CONSTRAINT action_pkey PRIMARY KEY (action_id)):原因:错误:关系“操作”已经存在; 嵌套异常是 org.springframework.beans.factory.BeanCreationException....

任何帮助将不胜感激。

问候,

4

2 回答 2

2

听起来确实像是在尝试再次运行更改日志。changeLog 中的每个 changeSet 都由 id、author 和 changelog 路径/文件名的组合标识。如果您运行“select * from databasechangelog”,您可以看到使用的值。

您的问题可能是您引用的更改日志文件与 ant 和 spring 不同,因此生成了不同的文件名值。通常您会希望将它们包含在类路径中,因此无论您在何处以及如何运行它们,它们都具有相同的路径(例如“com/example/db.changelog.xml”)

于 2009-12-18T14:33:43.523 回答
0

我遇到了同样的问题,并且能够通过更改 DATABASECHANGELOG 的文件名列以引用 spring 资源路径来解决它。就我而言,我使用的是 WEB-INF 目录下的 ServletContextResource:

update DATABASECHANGELOG set FILENAME = 'WEB-INF/path/to/changelog.xml' where FILENAME = 'changelog.xml'
于 2010-02-01T17:08:49.457 回答