Spring Boot引入dev配置文件后构建阶段测试执行时出现属性解析失败问题
嘿,我来帮你捋捋这个问题!核心原因其实很直白:你把默认的application.yml改成application-dev.yml后,测试阶段的Spring上下文并没有自动激活dev这个环境配置,导致根本没加载到application-dev.yml里的属性,自然就找不到${sftp.host}这些配置项了。
给你几个具体的解决步骤:
1. 给测试类明确激活dev环境配置
在你的测试类上加上@ActiveProfiles("dev")注解,这样测试运行时Spring就会自动加载application-dev.yml的配置了,示例代码如下:
@SpringBootTest @ActiveProfiles("dev") class DataMarshallerServiceTest { @Autowired private DataMarshallerService cut; // 你的其他测试代码 }
2. 确保Maven打包时正确关联Spring环境配置
你用的mvn clean package -P dcr里的dcr是Maven的profile,和Spring的dev环境配置不是一回事哦。如果想在打包时让Spring自动激活dev环境,要么在命令行直接指定Spring的环境参数:
mvn clean package -P dcr -Dspring.profiles.active=dev
要么可以在pom.xml的dcr profile配置里,添加Spring环境的激活参数,这样执行-P dcr时就会自动激活Spring的dev环境。
3. 关于自定义YamlPropertySourceFactory的小检查
你的主类用了自定义的YamlPropertySourceFactory加载feeds-config.yml,这个是没问题的——它加载的是固定配置文件,和环境配置无关。只要feeds-config.yml里没有依赖sftp相关的属性,就不会影响当前问题,不用额外调整。
额外小建议
如果想更稳妥,你可以保留一个基础的application.yml,里面放一些通用的默认配置,然后application-dev.yml里只放dev环境特有的配置。这样即使哪天忘记激活环境配置,也有基础配置兜底,避免类似的属性解析错误。
备注:内容来源于stack exchange,提问作者Simeon Leyzerzon

