您的位置:首页 > 编程语言 > Java开发

spring context:property-placeholder无法加载配置文件,导致属性无效

2016-09-06 16:51 519 查看
在把现有项目转为maven项目时,启动报错:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.mybatis.spring.mapper.MapperScannerConfigurer#0' defined in URL [file:/D:/workspace/datasync/target/datasync/WEB-INF/classes/config/applicationContext.xml]: Cannot resolve reference to bean 'sqlSessionFactory' while setting bean property 'sqlSessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFactory' defined in URL [file:/D:/workspace/datasync/target/datasync/WEB-INF/classes/config/applicationContext.xml]: Cannot resolve reference to bean 'dataSource' while setting bean property 'dataSource'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in URL [file:/D:/workspace/datasync/target/datasync/WEB-INF/classes/config/applicationContext.xml]: Initialization of bean failed; nested exception is org.springframework.beans.TypeMismatchException: Failed to convert property value of type 'java.lang.String' to required type 'int' for property 'acquireIncrement'; nested exception is java.lang.NumberFormatException: For input string: "${c3p0.acquireIncrement}"


最后找到原因,是jdbc.properties中属性压根没有加载,导致把配置的变量名直接当成参数值,才会报错。

网上找到错误根本原因,是因为mybatis生成sqlSessionFactory比PropertyPlaceholderConfigurer初始化早的原因,导致变量没有及时加载进来

引用:

在spring里使用org.mybatis.spring.mapper.MapperScannerConfigurer
进行自动扫描的时候,设置了sqlSessionFactory 的话,可能会导致 PropertyPlaceholderConfigurer失效,也就是用${jdbc.username}这样之类的表达式,将无法获取到properties文件里的内容。 导致这一原因是因为,MapperScannerConigurer实际是在解析加载bean定义阶段的,这个时候要是设置sqlSessionFactory的话,会导致提前初始化一些类,这个时候,PropertyPlaceholderConfigurer还没来得及替换定义中的变量,导致把表达式当作字符串复制了。
但如果不设置sqlSessionFactory 属性的话,就必须要保证sessionFactory在spring中名称一定要是sqlSessionFactory ,否则就无法自动注入。又或者直接定义 MapperFactoryBean ,再或者放弃自动代理接口方式。

解决方案:

但是在原来项目启动时是不报错的,考虑转换maven项目,只有jar包会更改,拿现有jar包和原jar包对比,发现mybatis-xxx.jar和mybatis-spring-xxx.jar和原有项目的jar包版 本不一样,修改jar包版本后,问题解决。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐