2013-04-22 55 views
1

我想在liquibase中應用變更集後運行代碼。基本上我需要調用我的DBA在列添加到表之後提供的存儲過程。我一直在挖掘Liquibase API,但還沒有發現任何明顯的東西。如何從Liquibase生命週期中調用Java代碼?

感謝, 贖金

+0

對我來說最爲明顯的是:使用['sql' change](http://www.liquibase.org/documentation/changes/sql.html)來調用存儲過程並將其包含/包含到你的主腳本非常結束? 但我想你已經遇到過這個。是否有必要在添加新列時運行SP? – Jens 2013-04-24 07:56:31

+0

是的,那只是容易出現人爲錯誤,如果有人忘記了,那麼事情就處於不愉快的狀態 – 2013-04-24 16:41:57

回答

0

有一些時間與liquibase今天上午多一些發揮和與此上來了,這是不是很大,但應該是我現在所擁有的工作。

Database database = DatabaseFactory.getInstance().findCorrectDatabaseImplementation(new JdbcConnection(connection)); 
    Liquibase liquibase = new Liquibase("update.xml", new FileSystemResourceAccessor(), database); 
    List<ChangeSet> changeSets = liquibase.listUnrunChangeSets(null); 
    liquibase.update(null); 
    for (RanChangeSet ranChangeSet: database.getRanChangeSetList()) { 
     ChangeSet found = null; 
     for (ChangeSet changeSet: changeSets) { 
      if (ranChangeSet.isSameAs(changeSet)) { 
       found = changeSet; 
       break; 
      } 
     } 

     if (found == null) { 
      // ran previously 
      continue; 
     } 
     System.out.println(ranChangeSet.getChangeLog()); 
     for (Change change: found.getChanges()) { 
      if (change instanceof CreateTableChange) { 
       System.out.println(((CreateTableChange)change).getTableName()); 
      } 
      // handle others 
     } 
    }