是否有可能將db遷移輸出到SQL文件,而不是直接調用flyway中的數據庫更改?Flyway輸出到SQL文件
3
A
回答
0
我沒有找到辦法。切換到mybatis遷移。看起來不錯。
0
大多數情況下,這並不需要,因爲使用Flyway時,數據庫遷移本身已經以SQL編寫。
1
是的,這是可能的,並且就我而言,該功能對於不想允許在產品中使用flyway的DBA絕對是必須的。
我與從這裏修改代碼做的,它是飛行用幹運行命令,你可以添加一個FileWriter寫出來migrationDetails:
https://github.com/killbill/killbill/commit/996a3d5fd096525689dced825eac7a95a8a7817e
我做到了,是這樣的...項目結構(剛纔複製出來殺死比爾的項目,並更名爲包flywaydr:
.
./main
./main/java
./main/java/com
./main/java/com/flywaydr
./main/java/com/flywaydr/CapturingMetaDataTable.java
./main/java/com/flywaydr/CapturingSqlMigrationExecutor.java
./main/java/com/flywaydr/DbMigrateWithDryRun.java
./main/java/com/flywaydr/MigrationInfoCallback.java
./main/java/com/flywaydr/Migrator.java
./main/java/org
./main/java/org/flywaydb
./main/java/org/flywaydb/core
./main/java/org/flywaydb/core/FlywayWithDryRun.java
在Migrator.java添加(執行回調並把它放在DbMigrateWithDryRun.java):
} else if ("dryRunMigrate".equals(operation)) {
MigrationInfoCallback mcb = new MigrationInfoCallback();
flyway.dryRunMigrate();
MigrationInfoImpl[] migrationDetails = mcb.getPendingMigrationDetails();
if(migrationDetails.length>0){
writeMasterScriptToFile(migrationDetails);
}
}
然後寫東西文件是這樣的:
private static void writeMasterScriptToFile(MigrationInfoImpl[] migrationDetails){
FileWriter fw = null;
try{
String masterScriptLoc="path/to/file";
fw = new FileWriter(masterScriptLoc);
LOG.info("Writing output to " + masterScriptLoc);
for (final MigrationInfoImpl migration : migrationDetails){
Path file =Paths.get(migration.getResolvedMigration().getPhysicalLocation());
//if you want to copy actual script files parsed by flyway
Files.copy(file, Paths.get(new StringBuilder(scriptspathloc).append(File.separator).append(file.getFileName().toString()).toString()), REPLACE_EXISTING);
}
//or just get the sql
for (final SqlStatement sqlStatement : sqlStatements) {
//sqlStatement.getSql();
}
fw.write(stuff.toString());
} catch(Exception e){
LOG.error("Could not write to file, io exception was thrown.",e);
} finally{
try{fw.close();}catch(Exception e){LOG.error("Could not close file writer.",e);}
}
}
最後一件事提了,我編譯和打包放進一個.jar「具有相關性」通過行家(又名fatjar)(谷歌組裝插件+具有依賴關係的jar)並通過下面的命令運行它,或者你可以將它作爲一個依賴包含進來,並通過mvn exec:exec
目標來調用它,這也是我成功的一個目標。
$ java -jar /path/to/flywaydr-fatjar.jar dryRunMigrate -regular.flyway.configs -etc -etc
相關問題
- 1. 在Flyway獲取SQL輸出
- 2. AWK CSV文件到SQL文件輸出
- 3. Flyway:創建SQL init文件的興趣?
- 4. 將sql查詢輸出到文件
- 5. Powershell - 將SQL消息輸出到文件
- 6. 輸出到文件
- 7. 輸出到文本文件
- 8. 重定向輸出到輸出文件
- 9. GWT.log輸出到文件
- 10. 將awk輸出到文件
- 11. Xprof輸出到文件
- 12. tcpdump輸出GET到文件
- 13. Python:JSon輸出到文件
- 14. Ç - 輸出到文件
- 15. JavaScript輸出到文件
- 16. 輸出Dropdowlist到TPL文件
- 17. C++輸出到Excel文件
- 18. GhostScript的輸出到文件
- 19. Xml文件到CSV輸出
- 20. 寫輸出到文件
- 21. Python輸出到html文件
- 22. 輸出附加到文件
- 23. 升壓/輸出到文件
- 24. 慶典輸出到文件
- 25. 輸出XMLWriter到XML文件
- 26. Readline輸出到文件Node.js
- 27. 隨機輸出到文件
- 28. Flyway Ant嘗試打開.sql文件作爲zip,失敗並出現ZipException
- 29. 輸出文件到標準輸入
- 30. 將sql輸出行插入excel文件
你能告訴我更多關於你的用例嗎?這是你需要Java遷移的東西嗎?或者你想要用佔位符替換你的輸入sql? –
我假設對於生產數據庫,我不能通過jdbc自己更新數據庫,但將腳本發送給某個數據庫團隊。 – bertolami