Micronaut Test-Resources加载MySQL初始化脚本失败求助
解决Micronaut Test-Resources MySQL初始化脚本找不到的问题
核心问题与修复
你的配置存在两个关键错误:
- 多余的引号:
password和init-script-path的值被双引号包裹,导致Testcontainers解析路径时把引号当成了路径的一部分 - 错误的路径:
src/test/resources/是项目源码路径,编译后该目录下的文件会被放到classpath根目录,所以直接用脚本文件名即可
正确的application-test.properties配置
datasources.default.dialect=MYSQL datasources.default.driverClassName=com.mysql.cj.jdbc.Driver datasources.default.schema-generate=CREATE_DROP test-resources.containers.mysql.image-name=mysql:8.1.0 test-resources.containers.mysql.db-name=testDB test-resources.containers.mysql.username=dbuser test-resources.containers.mysql.password=mypassword test-resources.containers.mysql.init-script-path=init.sql
为什么这样修改?
- 引号问题:Micronaut配置文件中,字符串值不需要额外加双引号(除非值本身包含空格或特殊字符),加了引号会被当成值的一部分,导致Testcontainers寻找名为
"src/test/resources/init.sql"的文件,自然找不到。 - 路径问题:Maven在构建测试时,会把
src/test/resources下的所有文件复制到测试类路径的根目录(比如target/test-classes/),所以脚本在classpath中的路径就是init.sql,不需要带前缀或源码路径。
额外验证步骤
如果修改后还是有问题,可以做以下检查:
- 确认
init.sql确实存在于src/test/resources目录下,文件名和大小写完全匹配(MySQL容器默认大小写敏感,取决于系统环境) - 执行
mvn test-compile后,查看target/test-classes/目录下是否有init.sql文件,确保构建工具正确复制了资源 - 如果需要加载子目录下的脚本,比如
src/test/resources/sql/init.sql,则配置值应为sql/init.sql
内容的提问来源于stack exchange,提问作者Heavyrage
相关产品推荐
相关产品推荐

