spring context:property-placeholder无法加载配置文件,导致属性无效
2016-09-06 16:51
519 查看
在把现有项目转为maven项目时,启动报错:
最后找到原因,是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包版本后,问题解决。
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包版本后,问题解决。
相关文章推荐
- PropertyPlaceholderConfigurer加载属性配置文件:
- Spring配置文件context:property-placeholder无法载入属性问题
- Spring环境搭建之:通过PropertyPlaceholderConfigurer加载属性配置文件:
- context:property-placeholder,spring配置文件加载属性信息
- springMVC用property-placeholder加载配置属性文件
- 关于 Spring 中使用 context:property-placeholder 属性占位符设置配置文件
- 【异常】--spring context:property-placeholder location= 找不到环境配置文件 maven(257)
- 警惕手工加载spring配置文件导致数据库session无法释放
- Spring代码实例系列-09:通过Spring PropertyPlaceholderConfigurer将properties配置的属性注入到xml配置文件中
- Spring PropertyPlaceholderConfigure 加载配置文件
- spring 不同 配置文件中的占位符 无法获取 使用 context:property-placeholder
- 继承PropertyPlaceholderConfigurer 实现动态加载配置文件
- spring配置文件中的context:property-placeholder属性
- 【转】spring管理属性配置文件properties——使用PropertiesFactoryBean|spring管理属性配置文件properties——使用PropertyPlaceholderConfigurer
- spring管理属性配置文件properties——PropertiesFactoryBean和PropertyPlaceholderConfigurer的区别
- spring管理属性配置文件properties——使用PropertyPlaceholderConfigurer
- spring配置文件中的context:property-placeholder属性
- PropertyPlaceholderConfigurer属性配置文件 资源文件绑定
- window7 专业版 User Profile Service,无法加载用户配置文件
- 关于设置sql server 2008服务器属性时出现的无法加载xplog70.dll文件的问题