org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException:
### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Access denied for user 'woshin'@'localhost' (using password: YES))
### The error may exist in ssm/mapper/ItemsMapper.xml
### The error may involve ssm.mapper.ItemsMapper.selectByPrimaryKey
### The error occurred while executing a query
### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested
最近在做springmvc-spring-mybatis的整合,然而,一个小的问题造成了我一上午的困惑啊。最后发现问题很蠢,但是还是拿出来,希望为大家有类似的问题的时候有个借鉴。
@Test测试方法时,控制台报出cannotGetJdbcConnectionException这个异常,开始我以为是我的spring中applicationContext.xml中的bean标签id不匹配,检查了一遍又一遍,但是问题依然存在。我又坚持按照执行的过程,发现好像是我的配置文件路径有问题,于是改成了如下。
"classpath:spring/applicationContext-dao.xml"
然后发现,也不是。。。。绝望啊,百度了一下,发现有类似的问题 😄😄。
SSM 框架中配置文件提示错误:
Error querying database.
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 '
遇到这个异常,并花了不少时间。
异常:org.apache.commons.dbcp.SQLNestedException: Cannot load JDBC driver class 'com.mysql.jdbc.Driver '
不能加载驱动。
这个异常原因:
mysql驱动没有找到:解决方法,到oracle下载mysql对应版本的驱动,
下载什么版本的mysql驱动呢?
mysql官网已经有说明了。mysql5.x基本选择 mysql connector/j 5.1以上就ok。也是mysql推荐我们使用的驱动。mysql5.0以后版本不再兼容以前的版本。
在项目中的lib导入mysql connector/j 5.1+ 和在tomcat/lib里面加入mysql connector/j 5.1+
-
还有什么原因出现上述异常呢?
如:(1).jdbc.driver=com.mysql.jdbc.driver
drivername应该是com.mysql.jdbc.Driver这样才正常。
(2).jdbc.driver=com.mysql.jdbc.Driver(这里可能有空格) 在驱动后面带了空格之类,我遇到属于这类。
额额,看了一下忙检查我的是不是也有类似的问题,然儿,白瞎,,,。 💪
第一遍没看出来啥猫腻,一切正常,所有配置文件都自己加载了,并且都执行了,但是在最后返回的时候是空指针,不能创建sqlsessionfactory,没办法仔细阅读一遍吧,然后,,让我发现了他的小秘密,😄😄
原来org.springframework.core.env.PropertySourcesPropertyResolver,这个类会去加载你的各项属性,但是他先会去你的环境属性去寻找,再去系统属性去寻找,然后再去系统环境去寻找,如果这期间找到了与property 标签里的name相匹配的key则不继续寻找直接return,否则 return null,并在本地properties开始寻找。。。这就明了了。。原来我的本地系统用户名,username与property 标签里的name一样,被抓取出来了,都没执行到本地的db.properties文件。。
于是,我改了applicationContext.xml中的property的name属性为name,并将db.properties也改为name。当然,结果是:成功了。😄😄
问题虽然很智障,当时也是没仔细看看报错信息,
Access denied for user 'woshin'@'localhost' (using password: YES)
user并不是localhost而是'woshi'@'localhost',不然早就解决了。。但是,有没有大牛知道怎么能指定让他去找本地的properties文件,而不用把名改掉么??求指教啊!