将 liquibase mongodb 扩展与 Spring 引导一起使用

Using liquibase mongodb extension with Spring Boot

尝试在 Spring 启动时使用 liquibase-mongodb 扩展,但是 运行 迁移对我的数据库没有影响。

在 pom 文件中添加了 liquibase-core、liquibase-mongodb 扩展和 ongo-java-驱动程序作为依赖项。

这是我的更新日志文件:

<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog
    xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
    xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog 
    http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.0.xsd
    http://www.liquibase.org/xml/ns/dbchangelog-ext 
    http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd">

<changeSet id="first" author="andrei">
    <ext:createCollection collectionName="myCollection">
        <ext:options>
            {
            validator: {
            $jsonSchema: {
            bsonType: "object",
            required: ["name", "address"],
            properties: {
            name: {
            bsonType: "string",
            description: "The Name"
            },
            address: {
            bsonType: "string",
            description: "The Address"
            }
            }
            }
            },
            validationAction: "warn",
            validationLevel: "strict"
            }
        </ext:options>
    </ext:createCollection>
    </changeSet>
</databaseChangeLog>

我尝试注入 bean SpringLiquibase 但它需要我提供一个 DataSource,这是一个接口,mongo liquidbase 的扩展不提供此接口的实现。

@Bean
public SpringLiquibase liquibase() {
    MongoLiquibaseDatabase db = new MongoLiquibaseDatabase();
    SpringLiquibase liquibase = new SpringLiquibase();
    liquibase.setChangeLog("classpath:/db/changelog/db.changelog-master.yaml");
    //How to do this?
    // liquibase.setDataSource();
    liquibase.setShouldRun(true);
    return liquibase;
}

有没有人有 Spring 的 liquidbase mongodb 扩展的工作示例?

最简单的方法可能是使用 org.springframework.jdbc.datasource.SimpleDriverDataSourceliquibase.ext.mongodb.database.MongoClientDriver

MongoClientDriver 是 liquibase-mongodb 扩展的一部分,并根据 Liquibase 的需要使 MongoClient 适应 java.sql.Driver 接口。

这应该允许您创建 SimpleDriverDataSource 并将其传递给 liquibase,例如:

SimpleDriverDataSource dataSource = new SimpleDriverDataSource(new MongoClientDriver(), YOUR_URL, YOUR_USERNAME, YOUR_PASSWORD);
liquibase.setDataSource(dataSource);