spring+mybatis报错org.springframework.transaction.CannotCreateTransactionException: Could not open JDB

1.报错信息

HTTP状态 500 - 内部服务器错误


类型 异常报告

消息 Request processing failed; nested exception is org.springframework.transaction.CannotCreateTransactionException: Could not open JDBC Connection for transaction; nested exception is java.sql.SQLException: Connections could not be acquired from the underlying database!

描述 服务器遇到一个意外的情况,阻止它完成请求。

例外情况

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.transaction.CannotCreateTransactionException: Could not open JDBC Connection for transaction; nested exception is java.sql.SQLException: Connections could not be acquired from the underlying database!
	org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:982)
	org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:866)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:655)
	org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:851)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:764)
	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
	org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200)
	org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)

根本原因。

org.springframework.transaction.CannotCreateTransactionException: Could not open JDBC Connection for transaction; nested exception is java.sql.SQLException: Connections could not be acquired from the underlying database!
	org.springframework.jdbc.datasource.DataSourceTransactionManager.doBegin(DataSourceTransactionManager.java:305)
	org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:378)
	org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:474)
	org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:289)
	org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:98)
	org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185)
	org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)
	org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185)
	org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212)
	com.sun.proxy.$Proxy20.findAll(Unknown Source)
	com.yonglu.controller.AccountController.findAll(AccountController.java:40)
	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	java.lang.reflect.Method.invoke(Method.java:498)
	org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:209)
	org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136)
	org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102)
	org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:877)
	org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:783)
	org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
	org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:991)
	org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:925)
	org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:974)
	org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:866)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:655)
	org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:851)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:764)
	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
	org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200)
	org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)

2.idea中报错信息

27-Mar-2022 13:08:07.032 警告 [com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#2] com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask.run com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@749dd0f -- Acquisition Attempt Failed!!! Clearing pending acquires. While trying to acquire a needed new resource, we failed to succeed more than the maximum number of allowed acquisition attempts (30). Last acquisition attempt exception: 
	java.sql.SQLException: Access denied for user '��研先生'@'localhost' (using password: YES)
		at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055)
		at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
		at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3491)
		at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423)
		at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:910)
		at com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java:3923)
		at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1273)
		at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2031)
		at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:718)
		at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:46)
		at sun.reflect.GeneratedConstructorAccessor26.newInstance(Unknown Source)
		at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
		at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
		at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
		at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:302)
		at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:282)
		at com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:134)
		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)

3.解决方法

jdbc.properties中信息

 查找信息后,有网友说是url后缺少,加上后

 依旧报错。

按照其他方法尝试后,在spring的配置文件applicationContext.xml中的"sqlSessionFactory" bean中加上<property name="mapperLocation">,

 结果依旧报错。

最后在这里找到方法

https://blog.csdn.net/aiyexun0798/article/details/102275205?spm=1001.2101.3001.6650.3&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-3.pc_relevant_antiscanv2&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-3.pc_relevant_antiscanv2

jdbc.properties中不能使用username,可以用jdbc.username或者user替换,具体原因还不清楚。

至此,问题解决!

4.疑问

1)为什么jdbc.properties中不能用username?

2)为什么ideal中这个的报错会有乱码?

  • 22
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
根据提供的引用内容,解决Mybatis报错org.apache.ibatis.exceptions.PersistenceException的方法如下: 1. 检查配置文件:首先,确保你的Mybatis配置文件正确无误。检查是否存在语法错误、路径错误或其他配置错误。特别注意检查数据库连接信息是否正确。 2. 检查SQL语句:如果报错信息中包含"Error querying",则可能是SQL语句的问题。检查你的SQL语句是否正确,包括表名、列名、参数等是否与数据库中的实际情况一致。 3. 检查映射文件:如果使用了映射文件,检查映射文件中的配置是否正确。确保映射文件中的命名空间、SQL语句的id、参数等与实际情况一致。 4. 检查数据库连接:如果报错信息中包含"Error querying",还需要检查数据库连接是否正常。确保数据库服务已启动,并且数据库连接信息正确。 5. 查看详细错误信息:如果以上方法都无法解决问题,可以查看详细的错误信息,以便更好地定位问题。可以通过打印异常堆栈信息或查看日志文件来获取更多的错误信息。 6. 检查依赖:如果以上方法都无法解决问题,还可以检查你的项目依赖是否正确。确保你的项目中包含了正确版本的Mybatis依赖。 下面是一个示例代码,演示了如何解决Mybatis报错org.apache.ibatis.exceptions.PersistenceException: ```java try { // 执行Mybatis操作 } catch (PersistenceException e) { // 处理异常 e.printStackTrace(); } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值