我在使用Spring環境的項目中使用Liquibase。但是回滾功能似乎不起作用。
在春季環境中不能使用Liquibase交易
我懷疑,不支持回滾功能使用Spring運行Liquibase因爲the manual時說:
LiquiBase可以讓你自動地或者通過自定義回滾SQL撤消對數據庫所做的更改。回滾支持在命令行,Ant,Maven和Grails中可用。
然而,很難相信在這種設置中回滾是不可能的。所以問題是:「爲什麼回滾不起作用,我如何才能回滾工作?」
編輯:
我現在意識到我應該問的問題有點不同。我想要的回滾類型是在遷移時出現錯誤時發生的回滾。
我試圖用交易(因爲這些在那裏爲我承擔),但這並沒有希望達到的效果。更改集的
的例子,就會出問題:
<changeSet runInTransaction="true">
<createTable tableName="table1">
<column name="a" type="int"/>
</createTable>
<createTable tableName="table1">
<column name="a" type="int"/>
</createTable>
<createTable tableName="table2">
<column name="a" type="int"/>
</createTable>
</changeSet>
當我運行的例子變更集,Liquibase設法創建table1的,但是當它試圖創建另一個表具有相同名稱的失敗(明顯)。創建的表格不會被刪除並保留到數據庫。
看着the Liquibase manual我注意到:
runInTransaction
如若變更跑出作爲單個事務(如果可能的話)?默認爲true。 警告:小心使用此屬性。如果設置爲false,並通過運行包含多個語句的變更發生錯誤的部分方式,LiquiBase databasechangelog表將處於無效狀態留給由於1.9
我使用MySQL,但是更改集必須與MSSQL和Oracle一起工作。
我還使用Spring的事務,而這些工作的完善,如何獲得Liquibase雙方迷死那些真棒(與數據庫無關)交易的任何想法?
我沒有問正確的問題。我已經解決了這個問題,請參閱我的修訂問題。 – siebz0r
很好的解釋,謝謝;-) – siebz0r
沒有問題...高興地幫助! –