使用context:property-placeholder载不进属性原因分析与解决方案
2012-12-17 23:32
513 查看
我用spring3.0.6+mybatis3.0.6+mybatis-spring1.0.2做了一个demo,我把数据库连接驱动放在src下,但是我在spring配置文件中加上 <context:property-placeholder location="classpath:jdbc.properties" />,dataSource配置如下:
抛出异常如下:
而把上面那段注释的打开,相当于写死在配置文件中就正常。从上面异常我只能看出没加载
属性文件成功,属性文件如下:
我是maven搭的,全放在/src/main/resources下,哪位帮我找找原因,谢谢!
标签:
Spring MyBatis MyBatis-Spring
我想问同样的问题共0个人想要问同样的问题 补充话题说明»
分享到
收藏
2
举报
踩 0 | 顶 0
ruben 回答于 2011-11-19 21:38
举报
我也遇到过这个问题,但不清楚是否和你的情况一样,不过导致的原因应该差不多。
==================================================
在spring里使用org.mybatis.spring.mapper.MapperScannerConfigurer 进行自动扫描的时候,设置了sqlSessionFactory 的话,可能会导致PropertyPlaceholderConfigurer失效,也就是用${jdbc.username}这样之类的表达式,将无法获取到properties文件里的内容。 导致这一原因是因为,MapperScannerConigurer实际是在解析加载bean定义阶段的,这个时候要是设置sqlSessionFactory的话,会导致提前初始化一些类,这个时候,PropertyPlaceholderConfigurer还没来得及替换定义中的变量,导致把表达式当作字符串复制了。
但如果不设置sqlSessionFactory 属性的话,就必须要保证sessionFactory在spring中名称一定要是sqlSessionFactory ,否则就无法自动注入。又或者直接定义 MapperFactoryBean ,再或者放弃自动代理接口方式。
--- 共有 1 条评论 ---
能否给出具体的配置方法吗?我也遇到相同的问题,根据你的描述,我没弄明白怎么修改。(1个月前
by 常育新)
有帮助(1) | 没帮助(0) | 评论(1) | 引用此答案
hyanqing 回答于 2011-11-19 22:04
举报
谢谢这位兄弟,我也刚刚找到这个原因了,和你上面原因一样,我注释掉了,就没问题
有帮助(0) | 没帮助(0) | 评论(0) | 引用此答案
johnny! 回答于 2012-03-05 22:17
举报
我现在也遇到了这个问题,LZ你是注释掉什么就没问题的?
有帮助(0) | 没帮助(0) | 评论(0) | 引用此答案
hyanqing 回答于 2012-03-06 20:10
举报
我现在也遇到了这个问题,LZ你是注释掉什么就没问题的?
就是这个org.mybatis.spring.mapper.MapperScannerConfigurer中配置的bean下有属性sqlSessionFactory,如果配置了,就去掉这个属性,变成如下:
<beanclass="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property value="com.hyq.showcase.mapper,com.hyq.common.core.mapper" name="basePackage"/>
</bean>
--- 共有 2 条评论 ---
我遇到了同样的问题。如果在spring配置文件中配置了MapperScannerConfigurer,服务器启动时就会报以下错误:
Could not load driverClass ${driverClassName} 也没有配置sqlSessionFactory (8个月前 by hareee)
谢谢。
问题解决了! (8个月前 by johnny!)
有帮助(0) | 没帮助(0) | 评论(2) | 引用此答案
icanfly 回答于 2012-07-25 13:31
举报
楼上的解决方案比较一般,在3.1.1版本中配置的时候提供了以下:
<beanclass="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.xxxx.dal.mapper" />
<property name="sqlSessionFactoryBeanName" value="ysSqlSessionFactory" />
<!-- <property name="sqlSessionFactory" ref="ysSqlSessionFactory"></property> -->
</bean>
改用sqlSessionFactoryBeanName注入就没有问题(不要使用sqlSessionFactory属性注入,使用sqlSessionFactoryBeanName注入),因为这时不会立即初始化sqlSessionFactory,传入的只是名字,非bean,所以不会引发提前初始化问题。。
以上供参考!
有帮助(0) | 没帮助(0) | 评论(0) | 引用此答案
常育新 回答于 2012-11-09 22:41
举报
我这么配置也会出错!~
有帮助(0) | 没帮助(0) | 评论(0) | 引用此答案
常育新 回答于 2012-11-09 23:21
举报
楼上的解决方案比较一般,在3.1.1版本中配置的时候提供了以下:
<beanclass="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.xxxx.dal.mapper" />
<property name="sqlSessionFactoryBeanName" value="ysSqlSessionFactory" />
<!-- <property name="sqlSessionFactory" ref="ysSqlSessionFactory"></property> -->
</bean>
改用sqlSessionFactoryBeanName注入就没有问题(不要使用sqlSessionFactory属性注入,使用sqlSessionFactoryBeanName注入),因为这时不会立即初始化sqlSessionFactory,传入的只是名字,非bean,所以不会引发提前初始化问题。。
以上供参考!
按照这个方法,解决问题了,多谢!~
有帮助(0) | 没帮助(0) | 评论(0) | 引用此答案
xuwei 回答于 2012-11-23 21:39
举报
我得还没有解决呢
有帮助(0) | 没帮助(0) | 评论(0) | 引用此答案
xuwei 回答于 2012-11-23 21:41
举报
我的只要有org.mybatis.spring.mapper.MapperScannerConfigurer 就会报错,读取不了 dataSource的变量
有帮助(0) | 没帮助(0) | 评论(0) | 引用此答案
renjunjie 回答于 2012-11-29 12:23
举报
终于找到解决的办法了,经测试去掉sqlSessionFactory和改成
<property name="sqlSessionFactoryBeanName" value="ysSqlSessionFactory" />
两种方法都可以,搞定
我的环境是spring3.1.3+springmvc+mybatis3.1.1+mybatis-spring1.1.1
本文转自:http://www.oschina.net/question/188964_32305
01 | < bean id = "dataSource" class = "com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method = "close" > |
02 | <!-- <property name="driverClass" value="oracle.jdbc.driver.OracleDriver"/> --> |
03 | <!-- <property name="jdbcUrl" value="jdbc:oracle:thin:@10.1.1.3:1521:orcl"/> --> |
04 | <!-- <property name="user" value="hyq"/> --> |
05 | <!-- <property name="password" value="oracle"/> --> |
06 |
07 | < property name = "driverClass" value = "${jdbc.driverClass}" /> |
08 | < property name = "jdbcUrl" value = "${jdbc.jdbcUrl}" /> |
09 | < property name = "user" value = "${jdbc.user}" /> |
10 | < property name = "password" value = "${jdbc.password}" /> |
11 |
12 | </ bean > |
1 | 2011-11-19 20:37:57 WARN [com.mchange.v2.c3p0.DriverManagerDataSource:107] - Could not load driverClass ${jdbc.driverClass} |
2 | java.lang.ClassNotFoundException: ${jdbc.driverClass} |
属性文件成功,属性文件如下:
01 | ## jdbc config |
02 | jdbc.driverClass=oracle.jdbc.driver.OracleDriver |
03 | jdbc.jdbcUrl=jdbc:oracle:thin: @10 .1. 1.3 : 1521 :orcl |
04 | jdbc.user=hyq |
05 | jdbc.password=oracle |
06 | jdbc.initialPoolSize= 5 |
07 | jdbc.minPoolSize= 5 |
08 | jdbc.maxPoolSize= 30 |
09 | jdbc.acquireIncrement= 5 |
10 | jdbc.maxIdleTime= 10 |
11 | jdbc.maxStatements= 0 |
标签:
Spring MyBatis MyBatis-Spring
我想问同样的问题共0个人想要问同样的问题 补充话题说明»
分享到
收藏
2
举报
踩 0 | 顶 0
按评价排序 | 显示最新答案 | 回页面顶部共有10个答案 我要回答»
ruben 回答于 2011-11-19 21:38
举报
我也遇到过这个问题,但不清楚是否和你的情况一样,不过导致的原因应该差不多。
==================================================
在spring里使用org.mybatis.spring.mapper.MapperScannerConfigurer 进行自动扫描的时候,设置了sqlSessionFactory 的话,可能会导致PropertyPlaceholderConfigurer失效,也就是用${jdbc.username}这样之类的表达式,将无法获取到properties文件里的内容。 导致这一原因是因为,MapperScannerConigurer实际是在解析加载bean定义阶段的,这个时候要是设置sqlSessionFactory的话,会导致提前初始化一些类,这个时候,PropertyPlaceholderConfigurer还没来得及替换定义中的变量,导致把表达式当作字符串复制了。
但如果不设置sqlSessionFactory 属性的话,就必须要保证sessionFactory在spring中名称一定要是sqlSessionFactory ,否则就无法自动注入。又或者直接定义 MapperFactoryBean ,再或者放弃自动代理接口方式。
--- 共有 1 条评论 ---
能否给出具体的配置方法吗?我也遇到相同的问题,根据你的描述,我没弄明白怎么修改。(1个月前
by 常育新)
有帮助(1) | 没帮助(0) | 评论(1) | 引用此答案
hyanqing 回答于 2011-11-19 22:04
举报
谢谢这位兄弟,我也刚刚找到这个原因了,和你上面原因一样,我注释掉了,就没问题
有帮助(0) | 没帮助(0) | 评论(0) | 引用此答案
johnny! 回答于 2012-03-05 22:17
举报
我现在也遇到了这个问题,LZ你是注释掉什么就没问题的?
有帮助(0) | 没帮助(0) | 评论(0) | 引用此答案
hyanqing 回答于 2012-03-06 20:10
举报
引用来自“johnny!”的答案
我现在也遇到了这个问题,LZ你是注释掉什么就没问题的?就是这个org.mybatis.spring.mapper.MapperScannerConfigurer中配置的bean下有属性sqlSessionFactory,如果配置了,就去掉这个属性,变成如下:
<beanclass="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property value="com.hyq.showcase.mapper,com.hyq.common.core.mapper" name="basePackage"/>
</bean>
--- 共有 2 条评论 ---
我遇到了同样的问题。如果在spring配置文件中配置了MapperScannerConfigurer,服务器启动时就会报以下错误:
Could not load driverClass ${driverClassName} 也没有配置sqlSessionFactory (8个月前 by hareee)
谢谢。
问题解决了! (8个月前 by johnny!)
有帮助(0) | 没帮助(0) | 评论(2) | 引用此答案
icanfly 回答于 2012-07-25 13:31
举报
楼上的解决方案比较一般,在3.1.1版本中配置的时候提供了以下:
<beanclass="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.xxxx.dal.mapper" />
<property name="sqlSessionFactoryBeanName" value="ysSqlSessionFactory" />
<!-- <property name="sqlSessionFactory" ref="ysSqlSessionFactory"></property> -->
</bean>
改用sqlSessionFactoryBeanName注入就没有问题(不要使用sqlSessionFactory属性注入,使用sqlSessionFactoryBeanName注入),因为这时不会立即初始化sqlSessionFactory,传入的只是名字,非bean,所以不会引发提前初始化问题。。
以上供参考!
有帮助(0) | 没帮助(0) | 评论(0) | 引用此答案
常育新 回答于 2012-11-09 22:41
举报
01 | <bean id= "sqlSessionFactory" class = "org.mybatis.spring.SqlSessionFactoryBean" > |
02 | <property name= "configLocation" value= "classpath:mybatis-config.xml" /> |
03 | <property name= "dataSource" ref= "dataSource" /> |
04 | </bean> |
05 |
06 | <!-- mapper自动扫描 --> |
07 | <bean class = "org.mybatis.spring.mapper.MapperScannerConfigurer" > |
08 | <property name= "basePackage" value= "com.xxx.xxx" /> |
09 | <property name= "annotationClass" value= "org.springframework.stereotype.Repository" /> |
10 | </bean> |
有帮助(0) | 没帮助(0) | 评论(0) | 引用此答案
常育新 回答于 2012-11-09 23:21
举报
引用来自“icanfly”的答案
楼上的解决方案比较一般,在3.1.1版本中配置的时候提供了以下:<beanclass="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.xxxx.dal.mapper" />
<property name="sqlSessionFactoryBeanName" value="ysSqlSessionFactory" />
<!-- <property name="sqlSessionFactory" ref="ysSqlSessionFactory"></property> -->
</bean>
改用sqlSessionFactoryBeanName注入就没有问题(不要使用sqlSessionFactory属性注入,使用sqlSessionFactoryBeanName注入),因为这时不会立即初始化sqlSessionFactory,传入的只是名字,非bean,所以不会引发提前初始化问题。。
以上供参考!
按照这个方法,解决问题了,多谢!~
有帮助(0) | 没帮助(0) | 评论(0) | 引用此答案
xuwei 回答于 2012-11-23 21:39
举报
我得还没有解决呢
有帮助(0) | 没帮助(0) | 评论(0) | 引用此答案
xuwei 回答于 2012-11-23 21:41
举报
01 | < bean id = "sqlSessionFactory" class = "org.mybatis.spring.SqlSessionFactoryBean" > |
02 | < property name = "dataSource" ref = "dataSource" /> |
03 | <!-- 自动扫描entity目录, 省掉Configuration.xml里的手工配置 --> |
04 | < property name = "typeAliasesPackage" value = "com.hzbank.erp.mybatis.entity" /> |
05 | <!-- 显式指定Mapper文件位置 --> |
06 | < property name = "mapperLocations" value = "classpath*:mybatis/TUserMapper.xml" /> |
07 | </ bean > |
08 |
09 | <!-- 扫描basePackage下所有以@MyBatisRepository标识的 接口 --> |
10 | < bean class = "org.mybatis.spring.mapper.MapperScannerConfigurer" > |
11 | < property name = "sqlSessionFactoryBeanName" value = "sqlSessionFactory" /> |
12 | < property name = "basePackage" value = "com.hzbank.erp.mybatis" /> |
13 | < property name = "annotationClass" value = "com.hzbank.erp.mybatis.interf.MyBatisRepository" /> |
14 |
15 | </ bean > |
有帮助(0) | 没帮助(0) | 评论(0) | 引用此答案
renjunjie 回答于 2012-11-29 12:23
举报
终于找到解决的办法了,经测试去掉sqlSessionFactory和改成
<property name="sqlSessionFactoryBeanName" value="ysSqlSessionFactory" />
两种方法都可以,搞定
我的环境是spring3.1.3+springmvc+mybatis3.1.1+mybatis-spring1.1.1
本文转自:http://www.oschina.net/question/188964_32305
相关文章推荐
- spring使用context:property-placeholder载不进属性问题
- spring3+mybatis 使用MapperScannerConfigurer时context:property-placeholder载不进属性
- spring使用context:property-placeholder载不进属性问题
- spring使用context:property-placeholder载不进属性问题
- spring 使用context:property-placeholder载不进属性 属性加载之前就读取属性变量
- 配置mybatis数据库连接池,使用context:property-placeholder载不进属性
- 关于 Spring 中使用 context:property-placeholder 属性占位符设置配置文件
- spring使用context:property-placeholder载不进属性问题 wangbiglei 发表于1年前 原 spring使用context:property-placeholder载不进属性问题
- spring 和mybatis整合时 使用context:property-placeholder载不进属性 还报org.springframework.beans.factory.BeanCrea
- spring使用context-property-placeholder载不进属性问题
- struts同时使用属性注入和模型驱动注入数据注入失败原因分析及解决方法
- spring配置文件中的context:property-placeholder属性
- 在Android library中不能使用switch-case语句访问资源ID的原因分析及解决方案
- 在Android library中不能使用switch-case语句访问资源ID的原因分析及解决方案
- 关于&lt;context:property-placeholder&gt;多处使用的问题
- spring 不同 配置文件中的占位符 无法获取 使用 context:property-placeholder
- spring的context:property-placeholder属性
- spring的context:property-placeholder属性
- 在Android library中不能使用switch-case语句访问资源ID的原因分析及解决方案
- Spring配置文件<context:property-placeholder>标签使用浅谈<context:property-placeholder