关于:java.lang.ClassNotFoundException: com.mysql.jdbc.Driver 错误的几种地方
最近自己新搭建项目 SSM的。搭建好以后总是报错,报错如下:
### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot load JDBC driver class 'com.mysql.jdbc.Driver'] with root cause
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
看到这个错 首先会想到 是不是 mysql的驱动jar包没有?怎么可能老铁,我可是资深程序员 这种错误我怎么会犯。
然后又怀疑是不是自己DriverClassName写错?然后又一顿百度,我擦 这个我不可能记错啊 当时还在纠结 到底是com.mysql.jdbc.Driver还是com.jdbc.mysql.Driver
妈的,可能只找bug找疯了,在这个上面浪费一点时间,肯定是com.mysql.jdbc.Driver。但是这个我也写对了啊。又一顿找。妈的 找了有2小时,
甚至找到了这个文章中的https://blog.****.net/zhaoxiangpeng16/article/details/51025657。
这文章内容是这样的:
使用spring+mybatis时会出现Cannot load JDBC driver class ${jdbc.driverClassName}之类的出错。
原因是在spring里使用org.mybatis.spring.mapper.MapperScannerConfigurer 进行自动扫描的时候,设置了sqlSessionFactory 的话,可能会导致PropertyPlaceholderConfigurer失效,也就是用${jdbc.username}这样之类的表达式,将无法获取到properties文件里的内容。 导致这一原因是因为,MapperScannerConigurer实际是在解析加载bean定义阶段的,这个时候要是设置sqlSessionFactory的话,会导致提前初始化一些类,这个时候,PropertyPlaceholderConfigurer还没来得及替换定义中的变量,导致把表达式当作字符串复制了。 但如果不设置sqlSessionFactory 属性的话,就必须要保证sessionFactory在spring中名称一定要是sqlSessionFactory ,否则就无法自动注入。又或者直接定义 MapperFactoryBean ,再或者放弃自动代理接口方式。
解决方案:将
<property name="sqlSessionFactory" ref="ysSqlSessionFactory"></property>
改成<property name="sqlSessionFactoryBeanName" value="ysSqlSessionFactory" />
但是我仔细看了配置文件,我不是这个错。我配置是正确的。如下
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="configLocation" value="classpath:mybatis-config.xml"/> <property name="mapperLocations" value="classpath*:com/example/test/mapper/*.xml"/> </bean> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.example.test.dao"/> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/> </bean>
最后实在没办法了,都过去3个小时了,只能一个配置一个的找,最后终于,尼玛发现 打脸了!
看2个图,你们对比下:
发现问题没有???妈的 真的是手残了,我db.properties配置的数据库连接相关的都加了 双引号 。打脸啊
把双引号去掉就好了。
正确的配置:注意看 都是没有双引号的!
jdbc.driverClassName=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://127.0.0.1:3306/test jdbc.username=root jdbc.password=root