spring+mybatis整合时占位符无法读取jdbc.properties的问题

https://blog.csdn.net/qq_17495033/article/details/48769967 

这段时间在使用spring+mybatis整合时遇到了一个问题,我想引用外部jdbc.properties,然后在配置文件中使用占位符,如下:
 <!--引入属性文件 -->
    <context:property-placeholder location="classpath:jdbc.properties"/>
    
    <!--数据库连接-->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass"><value>${jdbc.driverClassName}</value></property>
        <property name="jdbcUrl"><value>${jdbc.url}</value></property>
        <property name="user"><value>${jdbc.username}</value></property>
        <property name="password"><value>${jdbc.password}</value></property>
    </bean>
但是我发现出现了以下异常:
 WARN [com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#2] - Could not load driverClass ${jdbc.driverClassName}
java.lang.ClassNotFoundException: ${jdbc.driverClassName}
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1387)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:190)
    at com.mchange.v2.c3p0.DriverManagerDataSource.ensureDriverLoaded(DriverManagerDataSource.java:100)
    at com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:132)
    at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:182)
    at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:171)
    at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:137)
    at com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1014)
    at com.mchange.v2.resourcepool.BasicResourcePool.access$800(BasicResourcePool.java:32)
    at com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask.run(BasicResourcePool.java:1810)
    at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:547)
这个问题是无法识别占位符,就是在加载过程中直接把$(jdbc.driverClassName)当做字符串处理了。后来在网上找过问题的解决方式,是说因为配置了

<!-- 扫描接口所在的包  -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> 
        <property name="basePackage" value="com.xx.dao"/>
        <property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
    </bean>
MapperScannerConfigurer 先于properties文件处理,意思是没进行占位符的变量赋值就被使用了。去掉sqlSessionFactory这个属性
<!-- 扫描接口所在的包  -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> 
        <property name="basePackage" value="com.xx.dao"/>
    </bean>
同时记得加上这样的bean,id一定是这样,因为要使用的时候会去找这个bean
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">  
        <property name="dataSource" ref="dataSource"/>
        <property name="configLocation" value="classpath:config.xml" />
        <property name="mapperLocations">
            <value>classpath:dao/mapper/*Mapper.xml</value>
        </property>
    </bean>
ps:同时注意beans 可能会配置有这个 default-autowire="byName" ,去掉即可。
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值