使用Liquibase操作MongoDB时出现类型转换异常求助
Liquibase操作MongoDB出现ClassCastException异常的原因分析
使用场景
使用Liquibase对MongoDB进行版本控制
问题现象
执行liquibase update命令时抛出以下严重异常:
[2023-01-18 23:47:35] SEVERE [liquibase.integration] class liquibase.database.core.UnsupportedDatabase cannot be cast to class liquibase.nosql.database.AbstractNoSqlDatabase (liquibase.database.core.UnsupportedDatabase is in unnamed module of loader java.net.URLClassLoader @7d4793a8; liquibase.nosql.database.AbstractNoSqlDatabase is in unnamed module of loader java.net.URLClassLoader @aed0151) liquibase.exception.CommandExecutionException: liquibase.exception.LiquibaseException: liquibase.exception.UnexpectedLiquibaseException: java.lang.ClassCastException: class liquibase.database.core.UnsupportedDatabase cannot be cast to class liquibase.nosql.database.AbstractNoSqlDatabase (liquibase.database.core.UnsupportedDatabase is in unnamed module of loader java.net.URLClassLoader @7d4793a8; liquibase.nosql.database.AbstractNoSqlDatabase is in unnamed module of loader java.net.URLClassLoader @aed0151)
同时日志中存在警告:
[2023-01-18 23:47:35] WARNING [liquibase.database] Unknown database: MongoDB
背景信息
使用Liquibase CLI命令在Mongo集群上执行变更日志,命令如下:
set JAVA_OPTS=-Djava.security.auth.login.config=<jaas.conf> -Dsun.security.krb5.debug=true && liquibase --changelog-file=changelog-root.xml --url="mongodb://<USER>@<DB Host>:<Port>/<db name>?connectTimeoutMS=300000&authMechanism=GSSAPI&authSource=%24external" --classpath=liquibase_libs/liquibase-mongodb-4.14.0.jar:liquibase_libs/bson-4.6.1.jar:liquibase_libs/mongodb-driver-core-4.6.1.jar:liquibase_libs/mongodb-driver-sync-4.6.1.jar --driver=liquibase.ext.mongodb.database.MongoClientDriver --logLevel=debug --hub-mode=OFF update
已引入Liquibase MongoDB扩展驱动(Liquibase核心本身不支持MongoDB)
可能的原因
- 版本不兼容:Liquibase MongoDB扩展需要和核心Liquibase CLI版本严格匹配,若两者版本差异过大,会导致类结构不匹配,触发类型转换异常。比如当前使用4.14.0版本的扩展,需确认核心Liquibase CLI也是同版本。
- 类加载路径配置问题:classpath可能存在依赖遗漏或顺序错误,导致Liquibase无法正确加载MongoDB扩展的数据库实现类,转而使用默认的UnsupportedDatabase,最终引发类型转换失败。需检查classpath是否包含所有必要的扩展依赖,且路径配置无误。
- URL或驱动类配置错误:即使指定了MongoDB驱动类,若URL格式不符合Liquibase MongoDB扩展的要求,会导致Liquibase无法识别MongoDB数据库类型,仍按关系型数据库逻辑处理,先抛出Unknown Database警告,进而触发后续异常。
- 依赖冲突:classpath中存在重复或版本冲突的依赖包(如不同版本的MongoDB驱动、Liquibase相关类),导致类加载时加载了错误版本的类,引发类型转换问题。
内容的提问来源于stack exchange,提问作者deckingraj
相关产品推荐
相关产品推荐

