Spring集成MyBatis配置MapperScannerConfigurer无法解析数据源占位符问题
问题根因
报错核心是Spring未成功读取到application.yaml中的配置项,导致占位符${datasource.minpoolsize}没有被替换成实际数值,直接作为字符串传入数据源参数触发数字格式转换异常,主要由两个配置问题导致:
- PropertySourcesPlaceholderConfigurer默认不支持YAML格式的配置文件,无法解析yaml内容
- MapperScannerConfigurer作为高优先级的Bean定义后置处理器,执行时机早于默认配置的PropertySourcesPlaceholderConfigurer,可能导致依赖的占位符未提前解析
修复方案
1. 配置YAML解析支持
修改PropertySourcesPlaceholderConfigurer的配置,显式指定YAML解析工厂,同时设置最高优先级保证占位符提前解析:
<bean id="appProperties" class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer"> <property name="order" value="#{T(org.springframework.core.Ordered).HIGHEST_PRECEDENCE}"/> <property name="ignoreUnresolvablePlaceholders" value="true" /> <property name="propertiesFactoryBean"> <bean class="org.springframework.beans.factory.config.YamlPropertiesFactoryBean"> <property name="resources" value="classpath:configs/application.yaml"/> </bean> </property> </bean>
2. 校验配置匹配性
- 确认application.yaml中存在
datasource.minpoolsize配置项,注意大小写、分隔符与占位符完全一致,避免将min-pool-size误写为minpoolsize - 确认编译后的类路径下存在
configs/application.yaml文件,排除配置文件未被打包的问题
内容的提问来源于stack exchange,提问作者Suresh
相关产品推荐
相关产品推荐

