我需要通过ant执行相同的db-changelog,然后执行spring。我希望ant会运行更改日志,当春天运行时,它不会做任何事情而只是正常停止。 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 ....
任何帮助都会非常感激。
此致
答案 0 :(得分:2)
听起来好像是在尝试再次运行更改日志。 changeLog中的每个changeSet都由id,author和changelog路径/文件名的组合标识。如果运行“select * from databasechangelog”,则可以看到使用的值。
您的问题可能是您引用changelog文件的方式与ant和spring不同,因此会生成不同的文件名值。通常您会希望将它们包含在类路径中,因此无论您在何处以及如何运行它们,它们都具有相同的路径(例如“com / example / db.changelog.xml”)
答案 1 :(得分:0)
我遇到了同样的问题,并且能够通过更改DATABASECHANGELOG的文件名列来修复它,以引用spring资源路径。就我而言,我在WEB-INF目录下使用了ServletContextResource:
update DATABASECHANGELOG set FILENAME = 'WEB-INF/path/to/changelog.xml' where FILENAME = 'changelog.xml'