首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Liquibase对MongoDB失效

Liquibase对MongoDB失效
EN

Stack Overflow用户
提问于 2022-08-20 20:09:36
回答 1查看 463关注 0票数 1

我想得到一个液化基,Spring和MongoDB一起的例子。为了做到这一点,我使用弹簧起爆创建了一个Spring项目,并将Spring数据MongoDB作为依赖项。这个项目已经连接到数据库,现在我想使用清算库。我使用maven方法遵循了来自液基的指示,但是如果我运行maven命令mvn liquibase:status,我将得到以下错误:

代码语言:javascript
复制
Unexpected error running Liquibase: Cannot find database driver: com.mongodb.client.MongoClients.<init>()

它看起来像这个问题已经向清算基地报告了。,但是如果有一个解决方案,它还没有发布在这个问题上。

我还尝试使用CLI选项,将jars添加到液化库安装的lib文件夹中。如果我运行liquibase status,我会得到同样的错误

我在GitHub中创建了一个回购程序来展示这个问题。这里有一些相关的代码配置:

pom.xml

代码语言:javascript
复制
<project>
...
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.7.3</version>
    <relativePath /> <!-- lookup parent from repository -->
</parent>
...
<properties>
    <liquibase-mongo-ext.version>4.14.0</liquibase-mongo-ext.version>
    <liquibase-maven-plugin.version>4.2.0</liquibase-maven-plugin.version>
</properties>
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-mongodb</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.liquibase.ext</groupId>
        <artifactId>liquibase-mongodb</artifactId>
        <version>${liquibase-mongo-ext.version}</version>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.liquibase</groupId>
            <artifactId>liquibase-maven-plugin</artifactId>
            <version>${liquibase-maven-plugin.version}</version>
            <configuration>
                <propertyFile>liquibase.properties</propertyFile>
            </configuration>
            <dependencies>
                <dependency>
                    <groupId>org.liquibase.ext</groupId>
                    <artifactId>liquibase-mongodb</artifactId>
                    <version>${liquibase-mongo-ext.version}</version>
                </dependency>
                <dependency>
                    <groupId>org.mongodb</groupId>
                    <artifactId>mongodb-driver-sync</artifactId>
                    <version>4.6.1</version>
                </dependency>
            </dependencies>
        </plugin>
    </plugins>
</build>
</project>

liquibase.properties

代码语言:javascript
复制
changeLogFile=./mongo/changelog/changelog.sql
url=jdbc:mongodb://127.0.0.1:27017/local
driver=com.mongodb.client.MongoClients

我怎么能让清算基地和maven一起运行?有什么建议吗?

正如Andrey建议的那样,编辑1:

  • 驱动程序更新为:driver=liquibase.ext.mongodb.database.MongoClientDriver
  • 网址已更新为:url=mongodb://127.0.0.1:27017/local
  • 使用新的依赖项更新了来自液化库的插件
代码语言:javascript
复制
<dependency>
  <groupId>org.liquibase</groupId>
  <artifactId>liquibase-core</artifactId>
  <version>4.9.1</version>
</dependency>

mvn liquibase:update现在跟踪以下错误。因为另一个错误似乎与这个错误无关。我将解决这个问题并创建一个新线程。

代码语言:javascript
复制
[ERROR] Failed to execute goal org.liquibase:liquibase-maven-plugin:4.2.0:update (default-cli) on project mongo: Execution default-cli of goal org.liquibase:liquibase-maven-plugin:4.2.0:update failed: A required class was missing while executing org.liquibase:liquibase-maven-plugin:4.2.0:update: liquibase/configuration/HubConfiguration

编辑2:,正如答案中提到的,来自HubConfiguration类现在在liquibase.hub.HubConfiguration下的版本与插件的版本不匹配,因为HubConfiguration类现在在liquibase.hub.HubConfiguration下设置了可能也会导致CastException,所以无法找到类。因此我将版本liquibase-maven-plugin更新为4.9.1

此外,本地数据库的使用与验证器不兼容。URI在url=mongodb://127.0.0.1:27017/test文件中被更新为liquibase.properties

现在它就像一种魅力!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-21 00:06:40

我在您的配置中发现了以下错误:

1.

代码语言:javascript
复制
changeLogFile=./mongo/changelog/changelog.sql
url=jdbc:mongodb://127.0.0.1:27017/local
driver=com.mongodb.client.MongoClients

虽然liquibase-mongodb需要类似的内容(没有jdbc前缀,另一个驱动程序类):

代码语言:javascript
复制
changeLogFile=./mongo/changelog/changelog.sql
url=mongodb://127.0.0.1:27017/local
driver=liquibase.ext.mongodb.database.MongoClientDriver
  1. 清算版本:
代码语言:javascript
复制
<liquibase-maven-plugin.version>4.2.0</liquibase-maven-plugin.version>
  • 4.2.0液化版本似乎是与NoSQL DB扩展不兼容
  • SpringBoot2.7.3使用液化基4.9.1 -您需要以某种方式选择正确的液化基版本

最后,我在liquibase:update上得到了以下信息

错误未能在项目mongo上执行目标org.liquibase:liquibase-maven-plugin:4.14.0:update (默认-cli):错误设置或运行Liquibase: liquibase.exception.DatabaseException:未能执行:命令失败与错误72 (InvalidOptions):‘在服务器127.0.0.1:27017的本地内部数据库’中的UUID 31bd40b8-3e1c-45c8-9d03-77b91c67a1a9的集合local.DATABASECHANGELOGLOCK上不允许文档验证器。完整的响应是{"ok":0.0,"errmsg":“在集合local.DATABASECHANGELOGLOCK上不允许文档验证器使用UUID 31bd40b8-3e1c-45c8-9d03-77b91c67a1a9在本地内部数据库中”,"code":72,"codeName":"InvalidOptions"}

不知道这意味着什么--一些与mongodb和扩展有关的东西,我相信

UPD。

上一次错误的根源在文档中描述。

Restrictions

不能为管理数据库、本地数据库和配置数据库中的集合指定验证程序。

不能为system.*集合指定验证器。

因此,url (jdbc:mongodb://127.0.0.1:27017/local)应该指向另一个db。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73429817

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档