【Java】 org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection

柔情只为你懂 2021-09-29 07:34 1156阅读 0赞

【问题描述】

今天在使用ssm框架搭建项目,启动tomcat的时候遇到了如下的错误:

  1. org.apache.ibatis.exceptions.PersistenceException:
  2. ### 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 'root '@'localhost' (using password: YES))
  3. ### The error may exist in mapper/CustomerMapper.xml
  4. ### The error may involve com.zhexiang.mybatis_springmvc.model.selectCustomerByID
  5. ### The error occurred while executing a query
  6. ### 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 'root '@'localhost' (using password: YES))
  7. at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:26)
  8. at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:111)
  9. at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:102)
  10. at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:66)
  11. at com.zhexiang.mybatis_springmvc.dao.impl.CustomerDaoImpl.selectCustomerByID(CustomerDaoImpl.java:18)
  12. at com.zhexiang.mybatis_springmvc.dao.impl.CustomerDaoImplTest.testSelectCustomerByID(CustomerDaoImplTest.java:37)
  13. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  14. at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
  15. at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
  16. at java.lang.reflect.Method.invoke(Method.java:597)
  17. at junit.framework.TestCase.runTest(TestCase.java:176)
  18. at junit.framework.TestCase.runBare(TestCase.java:141)
  19. at junit.framework.TestResult$1.protect(TestResult.java:122)
  20. at junit.framework.TestResult.runProtected(TestResult.java:142)
  21. at junit.framework.TestResult.run(TestResult.java:125)
  22. at junit.framework.TestCase.run(TestCase.java:129)
  23. at junit.framework.TestSuite.runTest(TestSuite.java:255)
  24. at junit.framework.TestSuite.run(TestSuite.java:250)
  25. at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:84)
  26. at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
  27. at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
  28. at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
  29. at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
  30. at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
  31. at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
  32. Caused by: org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Access denied for user 'root '@'localhost' (using password: YES))
  33. at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80)
  34. at org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:81)
  35. at org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:67)
  36. at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:279)
  37. at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:72)
  38. at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:59)
  39. at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:267)
  40. at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:137)
  41. at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:96)
  42. at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:77)
  43. at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:108)
  44. ... 23 more
  45. Caused by: org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Access denied for user 'root '@'localhost' (using password: YES))
  46. at org.apache.commons.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1549)
  47. at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1388)
  48. at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)
  49. at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:111)
  50. at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:77)
  51. ... 33 more
  52. Caused by: java.sql.SQLException: Access denied for user 'root '@'localhost' (using password: YES)
  53. at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1074)
  54. at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4120)
  55. at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4052)
  56. at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:925)
  57. at com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1704)
  58. at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1250)
  59. at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2465)
  60. at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2498)
  61. at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2283)
  62. at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:822)
  63. at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
  64. at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
  65. at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
  66. at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
  67. at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
  68. at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
  69. at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:404)
  70. at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:317)
  71. at org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38)
  72. at org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:582)
  73. at org.apache.commons.dbcp.BasicDataSource.validateConnectionFactory(BasicDataSource.java:1556)
  74. at org.apache.commons.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1545)
  75. ... 37 more

【问题原因】

出现错误的原因是因为数据源配置错误:

(1)jdbc.properties文件

  1. driver=oracle.jdbc.driver.OracleDriver
  2. url=jdbc:oracle:thin:@ip:1521:xzw
  3. username=root
  4. password=root

(2)Spring配置文件

  1. <!-- 配置数据源 -->
  2. <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
  3. <property name="driverClassName" value="${driver}" />
  4. <property name="url" value="${url}" />
  5. <property name="username" value="${username}" />
  6. <property name="password" value="${password}" />
  7. </bean>
  8. <!-- 引入jdbc.properties -->
  9. <context:property-placeholder location="classpath:jdbc.properties"/>

上面的这两种写法是错误的。

【解决办法】

(1)jdbc.properties文件

  1. jdbc.driver=oracle.jdbc.driver.OracleDriver
  2. jdbc.url=jdbc:oracle:thin:@ip:1521:xzw
  3. jdbc.username=root
  4. jdbc.password=root

(2)Spring配置文件

  1. <!-- 配置数据源 -->
  2. <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
  3. <property name="driverClassName" value="${jdbc.driver}" />
  4. <property name="url" value="${jdbc.url}" />
  5. <property name="username" value="${jdbc.username}" />
  6. <property name="password" value="${jdbc.password}" />
  7. </bean>
  8. <!-- 引入jdbc.properties -->
  9. <context:property-placeholder location="classpath:jdbc.properties"/>

重新启动tomcat,问题已解决~

发表评论

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

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

相关阅读