由於Liquibase是用Java實現,並且依賴於JDBC,我會使用Java的說明。 Liquibase有一個實施數據庫的列表。這取決於你如何從Java代碼中調用它,但假設你使用liquibase.database.DatabaseFactory
,擴展它或實現類似的東西。通常您的代碼會是這個樣子(Scala中爲例):
def createLiquibase(dbConnection: Connection, diffFilePath: String): Liquibase = {
val database = DatabaseFactory.getInstance.findCorrectDatabaseImplementation(new JdbcConnection(dbConnection))
val classLoader = classOf[SchemaMigration].getClassLoader
val resourceAccessor = new ClassLoaderResourceAccessor(classLoader)
new Liquibase(diffFilePath, resourceAccessor, database)
}
def updateDb(db: DbConnectionProvider, diffFilePath: String): Unit = {
val dbConnection = db.getConnection
val liquibase = createLiquibase(dbConnection, diffFilePath)
try {
liquibase.update(null)
} catch {
case e: Throwable => throw e
} finally {
liquibase.forceReleaseLocks()
dbConnection.rollback()
dbConnection.close()
}
}
注意這部分DatabaseFactory.getInstance.findCorrectDatabaseImplementation(new JdbcConnection(dbConnection))
我們在java.sql.Connection
傳遞和Liquibase找到合適Database
實現它。您可以覆蓋findCorrectDatabaseImplementation
,甚至完全創建您自己的Database
子類。無論你喜歡什麼。
DatabaseFactory
中的方法是public Database findCorrectDatabaseImplementation(DatabaseConnection connection) throws DatabaseException
。從那裏您可以瞭解更多關於Database
類型的信息。您可以從H2或Oracle繼承它並重寫某些部分。
如果你使用Liquibase cmd客戶端,你可以做我上面描述的,構建一個jar文件等,然後從命令行運行,確保你的類路徑上有新的類。
H2中的兼容性模式並不能保證完全支持Oracle,Postgres等,因此在它上測試Oracle DML是有點可疑的想法。它可能會工作,直到你找到它不。
你是從代碼還是從cmd調用Liquibase?如果來自代碼,那麼你使用什麼語言? –
我正在使用gradle-liquibase-plugin [鏈接](https://github.com/tlberglund/gradle-liquibase-plugin),但我想我可能只是創建自己的定製gradle插件特定於項目我是在 –