Could not load driverClass ${jdbc.driver}

蔚落 2022-05-25 08:53 232阅读 0赞

今天在整合ssm做spring-mvc的Junit测试时,出现这样的错误如下:

  1. Could not load driverClass ${jdbc.driver}
  2. java.lang.ClassNotFoundException: ${jdbc.driver}
  3. at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
  4. at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
  5. at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
  6. at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
  7. at java.lang.Class.forName0(Native Method)
  8. at java.lang.Class.forName(Class.java:264)
  9. at com.mchange.v2.c3p0.DriverManagerDataSource.ensureDriverLoaded(DriverManagerDataSource.java:100)
  10. at com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:132)
  11. at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:182)
  12. at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:171)
  13. at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:137)
  14. at com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1014)
  15. at com.mchange.v2.resourcepool.BasicResourcePool.access$800(BasicResourcePool.java:32)
  16. at com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask.run(BasicResourcePool.java:1810)
  17. at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:547)

spring-dao.xml配置如下:

  1. <!-- 配置整合mybatis过程 -->
  2. <!-- 1.配置数据库相关参数的properties的属性 -->
  3. <context:property-placeholder location="classpath:jdbc.properties"/>
  4. <!-- 配置数据库连接池 -->
  5. <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
  6. <!-- 配置连接池属性 -->
  7. <property name="driverClass" value="${jdbc.driver}" />
  8. <property name="jdbcUrl" value="${jdbc.url}" />
  9. <property name="user" value="${jdbc.username}" />
  10. <property name="password" value="${jdbc.password}" />
  11. <!-- c3p0连接池的私有属性 -->
  12. <property name="maxPoolSize" value="30" />
  13. <property name="minPoolSize" value="10" />
  14. <!-- 关闭连接后不自动commit -->
  15. <property name="autoCommitOnClose" value="false" />
  16. <!-- 获取连接超时时间 -->
  17. <property name="checkoutTimeout" value="10000" />
  18. <!-- 当获取连接失败重试次数 -->
  19. <property name="acquireRetryAttempts" value="2" />
  20. </bean>
  21. <!-- 3.配置SqlSessionFactory -->
  22. <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  23. <!-- 注入数据库连接池 -->
  24. <property name="dataSource" ref="dataSource"/>
  25. <!-- 配置mybatis全局配置文件:mybatis-config.xml -->
  26. <property name="configLocation" value="classpath:mybatis-config.xml"></property>
  27. <!-- 扫描entity -->
  28. <property name="typeAliasesPackage" value="com.itwx.o2o.entity"></property>
  29. <!-- 扫描SQL配置文件mapper需要的xml文件 -->
  30. <property name="mapperLocations" value="classpath:mapper/*.xml"></property>
  31. </bean>
  32. <!-- 4.配置扫描Dao接口包,动态实现Dao接口,注入到Spring容器中 -->
  33. <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
  34. <!-- 注入sqlSessionFactoy -->
  35. <property name="sqlSessionFactory" ref="sqlSessionFactory" />
  36. <!-- 扫描的dao层接口包 -->
  37. <property name="basePackage" value="com.itwx.o2o.dao"></property>
  38. </bean>
  39. </beans>

重点错误是在配置扫描接口的时候出现错误,加红处配置错误;

  1. 如果将 ${jdbc.driverClassName} 改成具体的值就不会报错!
  2. 解决方案一:
  3.   <property name="sqlSessionFactory" ref="sqlSessionFactory"/>
  4. 改成
  5.   <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
  6. 记住ref要改成value
  7. 原因分析:是因为配置了class="org.mybatis.spring.mapper.MapperScannerConfigurer",而这句代码会在数据源加载前就执行了,之后就把表达式${jdbc.driverClassName}当成字符串执行了。

发表评论

表情:
评论列表 (有 0 条评论,232人围观)

还没有评论,来说两句吧...

相关阅读