开发者社区> 问答> 正文

spring使用propertyConfigurer配置连接池出错:报错

<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
	<property name="locations">  
	    <list>  
	        <value>classpath:config/config.properties</value>  
	    </list>  
	</property>  
</bean>
   
<bean id="dbInfo" class="com.metarnet.noc.db.DbInfo">
	<property name="driver" value="${jdbc.driverClass}" />  
	<property name="url" value="${jdbc.url}" />  
	<property name="user" value="${jdbc.user}" />  
	<property name="password" value="${jdbc.password}" />  
	<property name="initialPoolSize" value="${jdbc.initialPoolSize}" />  
	<property name="minPoolSize" value="${jdbc.minPoolSize}" />  
	<property name="maxPoolSize" value="${jdbc.maxPoolSize}" />
</bean>

<bean id="dataSource" lazy-init="true" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close" >  
	<property name="driverClass" value="com.mysql.jdbc.Driver" />
	<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/spring?useUnicode=true&characterEncoding=UTF-8" />  
	<property name="user" value="root" />  
	<property name="password" value="123456" />  
	<property name="initialPoolSize" value="5" />  
	<property name="minPoolSize" value="2" />  
	<property name="maxPoolSize" value="${jdbc.maxPoolSize}" />  
</bean>

如上面的配置, dbInfo是我用来测试propertyConfigurer赋值的,结果正常, 

可下面的dataSource 死活不能用这种方法配置 , 只要有 ${} 就报错

展开
收起
kun坤 2020-06-14 07:24:42 754 0
1 条回答
写回答
取消 提交回答
  • 在mybatis的配置文件中找到

    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"
      p:sqlSessionFactory-ref="sqlSessionFactory"
      p:basePackage="com.amar.db.ibatis"/>

    原因不明,但删除掉这行就可以了

    p:sqlSessionFactory-ref="sqlSessionFactory"

    ######https://code.google.com/p/mybatis/issues/detail?id=414 一直都存在的问题了,已解决。######配置多数据源的时候,不能去掉这个属性,看来只能修改源代码了######
        <context:property-placeholder location="classpath:config/config.properties"/>

    看看jdbc.maxPoolSize在 config.properties的配制名称对应是否正确吗?~~

    ######直接写值没问题, 一用${} 就报错 , 貌似是c3p0加载优先级太高######回复 @amar : 跟c3p0应该没关系的,同样的配制我测试是Ok的~估计在哪儿犯了个低级错误######回复 @ideajava : 这样修改一切正常, 所以认为是c3p0将 ${} 作为字符串处理了.######回复 @amar : <property name="maxPoolSize" value="${jdbc.maxPoolSize}" />   改成 <property name="maxPoolSize" value="10" /> 试试会不会报错?######检查过了,应该没问题######
    jdbc.driverClass=com.mysql.jdbc.Driver
    jdbc.url=jdbc:mysql://localhost:3306/spring?useUnicode=true&characterEncoding=UTF-8
    jdbc.user=root
    jdbc.password=123456
    jdbc.initialPoolSize=3
    jdbc.minPoolSize=3
    jdbc.maxPoolSize=10

    上面是config.properties内容######

    我觉得是  dataSource 直接将 ${jdbc.maxPoolSize} 作为字符串来处理了,

    没有将 ${jdbc.maxPoolSize}转化为配置文件中相对映的值

    莫非是我c3p0版本的问题? 我的版本是0.9.1.2

    ######试一试把dataSource中的所有值用${}代替一下,说不定就可以了呢######不用 ${} ,而直接赋值一切正常,  不会是c3p0不支持${} 吧?######

    很负责任地告诉你这跟c3p0没有半毛钱关系。仔细看看你报的是什么错?

    ######2012-06-12 21:14:11,234 WARN com.mchange.v2.c3p0.DriverManagerDataSource : Could not load driverClass ${jdbc.driverClass} java.lang.ClassNotFoundException: ${jdbc.driverClass}######

     dataSource 直接将 ${jdbc.maxPoolSize} 作为字符串来处理了,

    没有将 ${jdbc.maxPoolSize}转化为配置文件中相对映的值

    ######

    报的错就是

    2012-06-12 21:14:11,234 WARN  com.mchange.v2.c3p0.DriverManagerDataSource :
    Could not load driverClass ${jdbc.driverClass}
    java.lang.ClassNotFoundException: ${jdbc.driverClass}

     

     

    ######

    前段时间工期干得紧,没时间处理,现在有时间了, 在慢慢找找原因.

    目前认为原因可能是spring加载bean顺序的问题, 通过断点发现spring先加载ComboPooledDataSource,之后才加载PropertyPlaceholderConfigurer.

    ######

    我也遇到java.lang.ClassNotFoundException: ${jdbc.driverClass}这个报错,

    想知道怎么解决的

    2020-06-14 07:24:50
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
云栖社区特邀专家徐雷Java Spring Boot开发实战系列课程(第20讲):经典面试题与阿里等名企内部招聘求职面试技巧 立即下载
微服务架构模式与原理Spring Cloud开发实战 立即下载
阿里特邀专家徐雷Java Spring Boot开发实战系列课程(第18讲):制作Java Docker镜像与推送到DockerHub和阿里云Docker仓库 立即下载

相关实验场景

更多