Spring Test报错Failed to load ApplicationContext无法解析spring.messages.basename占位符
根因定位
这个错误和你重启的Docker、H2数据库完全无关,核心是Spring初始化时找不到spring.messages.basename配置项,你定义的messageSource Bean依赖这个占位符,配置缺失直接导致Bean创建失败,最终ApplicationContext加载失败。
解决步骤
- 检查测试类注解配置
单元测试默认不会自动加载主资源目录的配置文件,确认测试类是否通过@SpringBootTest、@TestPropertySource正确指定了配置文件路径或者直接注入配置:
示例代码:// 直接指定配置值 @SpringBootTest(properties = "spring.messages.basename=i18n/messages") // 或者指定测试专用配置文件 @TestPropertySource(locations = "classpath:application-test.properties") - 核对配置项是否存在
检查对应环境的application.yml/application.properties中是否配置了spring.messages.basename,值对应你国际化资源文件的存放路径,比如资源文件存放在resources/i18n目录下,前缀为messages,就配置为:spring.messages.basename=i18n/messages - 检查资源文件编译情况
大概率是构建工具未将resources下的配置文件、国际化资源文件打包到classpath,执行对应构建命令重新编译后再跑测试:- Maven项目执行:
mvn clean compile - Gradle项目执行:
gradle build
编译完成后确认target/classes(Maven)或build/classes(Gradle)目录下存在对应的配置文件和国际化资源文件。
- Maven项目执行:
- 配置默认值兜底
直接修改MessageConfiguration类中的注入代码,给占位符加默认值,避免配置缺失直接报错:// 冒号后为默认值,找不到配置时自动使用 @Value("${spring.messages.basename:i18n/messages}") private String messageBasename;
内容的提问来源于stack exchange,提问作者김태민
相关产品推荐
相关产品推荐

