Spring Boot 3.0.5集成Liquibase时db.changelog-master.xml文件找不到
Spring Boot 3.0.5集成Liquibase:db.changelog-master.xml找不到的排查方案
1. 先盯紧文件位置与配置的匹配度
- 确认
db.changelog-master.xml的实际存放路径,比如如果它在src/main/resources/db/changelog/下,那application.yml里的配置必须写成:
要是文件直接在spring: liquibase: change-log: classpath:/db/changelog/db.changelog-master.xmlsrc/main/resources根目录,配置就写classpath:/db.changelog-master.xml——路径前缀classpath:/不能丢,拼写要丝毫不差。 - 别漏看文件名:检查是不是把
db.changelog-master.xml写成了db.changelog-master.yml或者其他后缀,大小写也要对应(Windows下不敏感,但Linux/Jar包环境是大小写敏感的)。
2. 检查自定义Liquibase配置类的坑
如果你写了自定义配置类,别让它覆盖了正确的路径:
@Bean public SpringLiquibase liquibase(DataSource dataSource) { SpringLiquibase liquibase = new SpringLiquibase(); liquibase.setDataSource(dataSource); // 这里的路径必须和文件实际位置完全一致 liquibase.setChangeLog("classpath:/db.changelog-master.xml"); return liquibase; }
另外,不要随便加@EnableAutoConfiguration(exclude = LiquibaseAutoConfiguration.class),这会关掉Spring Boot的Liquibase自动配置,导致自定义配置如果没写对就直接报错。
3. 核对build.gradle的依赖配置
确保Liquibase核心依赖正确引入,Spring Boot 3.x不需要手动指定版本,依赖管理会自动适配:
dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.liquibase:liquibase-core' // 对应你的数据库驱动,比如MySQL 8+用这个 runtimeOnly 'com.mysql:mysql-connector-j' }
要是没加liquibase-core,或者依赖被意外排除了,Liquibase根本起不来,自然找不到配置文件。
4. 检查文件是否被正确打包
- 在IDE里,确认文件所在目录被标记为Resources Root(比如IntelliJ IDEA里右键目录 -> Mark Directory as -> Resources Root),不然打包时不会把文件放进classpath。
- 打个包试试,用
jar tf your-project.jar命令查看,找BOOT-INF/classes/下有没有你的db.changelog-master.xml——如果没有,说明文件没被正确打包,检查IDE的资源目录配置或者gradle的sourceSets配置。
5. 从报错堆栈抓关键信息
如果报错是java.io.FileNotFoundException: class path resource [xxx] cannot be opened because it does not exist,直接对应路径不匹配或者文件没打包;如果是LiquibaseException: Change log file xxx not found,先检查配置里的路径有没有多余/缺失的斜杠,或者是不是用了相对路径而非classpath路径。
内容的提问来源于stack exchange,提问作者5frags
相关产品推荐
相关产品推荐

