2009-12-18 6 views
1

J'ai besoin d'exécuter le même db-changelog par ant et ensuite par spring. J'espère que cette fourmi va courir le changelog et quand la course du printemps, elle ne fera rien et s'arrêtera normalement. Ant exécute le db-changelog avec succès, puis exécute le ressort mais lance une exception, partie de la trace de la pile:Problème lors de l'exécution de liquibase avec un agent différent

Raison: liquibase.exception.JDBCException: Erreur lors de l'exécution de l'action SQL CREATE TABLE (action_id int8 NOT NULL, action_name VARCHAR (255), version_no int8, reason_required BOOLEAN, comment_required BOOLEAN, ID_étape int8, CONSTRAINT action_pkey PRIMARY KEY (action_id)): Causée par: Erreur lors de l'exécution de l'action SQL CREATE TABLE (ID_action int8 NON NULL, nom_action VARCHAR (255), version_no int8, reason_required BOOLEAN, comment_required BOOLEAN, ID_étape int8, CONSTRAINT action_pkey PRIMARY KEY (ID_action)): Causé par: ERREUR: relation "action" existe déjà; l'exception imbriquée est org.springframework.beans.factory.BeanCreationException ....

Toute aide sera très appréciée.

Cordialement,

Répondre

2

Cela ressemble il tente de courir à nouveau le changelog. Chaque changeSet dans changeLog est identifié par une combinaison de l'identifiant, de l'auteur et du chemin/nom du fichier changelog. Si vous exécutez "select * from databasechangelog", vous pouvez voir les valeurs utilisées. Votre problème est peut-être que vous faites référence au fichier changelog différemment de ant et spring, générant ainsi des valeurs de nom de fichier différentes. Habituellement, vous voudrez les inclure dans le classpath donc peu importe où et comment vous les exécutez, ils ont le même chemin (comme "com/example/db.changelog.xml")

+0

Merci Nathan, C'est vraiment le problème. Mais j'ai changé l'implémentation pour exécuter le changelog au printemps seulement pour éviter tout mal de tête supplémentaire: D. –

0

J'ai rencontré ce même problème et était capable de le réparer en modifiant la colonne du nom de fichier de DATABASECHANGELOG pour faire référence au chemin de ressource de printemps. Dans mon cas, j'utilisais un ServletContextResource sous le répertoire WEB-INF:

update DATABASECHANGELOG set FILENAME = 'WEB-INF/path/to/changelog.xml' where FILENAME = 'changelog.xml' 
Questions connexes