You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot集成Liquibase+MongoDB启动时未执行数据库迁移问题

解决Spring Boot + Liquibase + MongoDB启动未执行迁移的问题

我之前也碰到过类似的情况,折腾了好一会儿才搞定,下面给你几个排查和解决的方向:

1. 修正数据库配置(关键!)

你现在用了spring.datasource配置,但这是针对关系型数据库的配置方式,MongoDB作为非关系型数据库,Liquibase扩展需要专门的配置项。把你的application配置改成这样:

spring:
  application:
    name: photo-app-liquibase
  data:
    mongodb:
      uri: mongodb://localhost:27017/photo-app
liquibase:
  mongodb:
    uri: mongodb://localhost:27017/photo-app
  change-log: classpath:db/changelog/db.changelog-master.xml
  enabled: true # 显式开启Liquibase,避免自动配置失效

解释一下:spring.data.mongodb.uri是Spring Data MongoDB的连接配置,而liquibase.mongodb.uri是Liquibase MongoDB扩展需要的连接参数,两个都得配上,不然Liquibase找不到MongoDB的连接信息。

2. 修正变更日志的文件路径

你的主变更日志db.changelog-master.xml已经放在src/main/resources/db/changelog目录下了,所以<include>标签里的路径应该用相对路径,不需要再加db/changelog/前缀。改成:

<include file="20201029215628_create-users-table.xml"/>

如果还是不行,可以试试绝对路径写法:classpath:db/changelog/20201029215628_create-users-table.xml。

3. 检查依赖版本兼容性

你用的liquibase-mongodb是4.1.1版本,这个版本比较老了,建议和Spring Boot管理的liquibase-core版本做匹配。比如查看项目依赖树里的liquibase-core版本,然后选择同大版本的liquibase-mongodb:

<dependency>
    <groupId>org.liquibase.ext</groupId>
    <artifactId>liquibase-mongodb</artifactId>
    <!-- 比如liquibase-core是4.9.x,就用对应版本的扩展 -->
    <version>4.9.1</version>
</dependency>

版本不兼容很容易导致Liquibase的MongoDB扩展无法正常初始化。

4. 开启Liquibase日志排查

默认的日志级别可能看不到Liquibase的执行细节,你可以在application配置里添加日志配置,看看Liquibase到底有没有加载变更日志:

logging:
  level:
    liquibase: DEBUG

启动后如果能看到Liquibase相关的DEBUG日志,就能知道是找不到文件、连接有问题,还是没有需要执行的变更。

5. 确认变更日志的语法正确性

MongoDB的Liquibase变更语法和关系型数据库不一样,比如创建集合的写法应该是这样的(给你个示例):

<?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:mongodb="http://www.liquibase.org/xml/ns/mongodb"
                   xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
                                       http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.9.xsd
                                       http://www.liquibase.org/xml/ns/mongodb
                                       http://www.liquibase.org/xml/ns/mongodb/liquibase-mongodb-4.9.xsd">
    <changeSet id="20201029215628" author="your-name">
        <mongodb:createCollection collectionName="users"/>
    </changeSet>
</databaseChangeLog>

要注意引入mongodb的命名空间,并且用MongoDB专属的变更标签,不能用关系型数据库的createTable之类的标签,不然Liquibase会识别不了。

按照上面的步骤一步步排查,应该就能解决迁移不执行的问题了~

内容的提问来源于stack exchange,提问作者user4383363

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 18:22:38