当前位置: 首页 > 面试题库 >

基础-对Hibernate / JDBC连接池问题进行故障排除

蔚和风
2023-03-14
问题内容

Hibernate从基础连接池获得的数据库连接的责任是什么。它在连接使用之前是否进行测试以查看连接是否已关闭?如果是这样,从池中获得另一个连接?

我在下面添加了错误和确认信息。我可以从哪里开始解决此问题的任何想法将非常有帮助。以及有关我们正在使用的SQL Server驱动程序设置的任何建议。

从Catalina日志中:

2010年11月4日21:54:52.691警告org.apache.tomcat.jdbc.pool.ConnectionPool.abandon连接已被放弃PooledConnection [ConnectionID:8]:java.lang.Exception
    在org.apache.tomcat.jdbc.pool.ConnectionPool.getThreadDump(ConnectionPool.java:926)
    在org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:681)
    在org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:545)
    在org.apache.tomcat.jdbc.pool.ConnectionPool.getConnection(ConnectionPool.java:166)
    在org.apache.tomcat.jdbc.pool.DataSourceProxy.getConnection(DataSourceProxy.java:106)

从我们的应用程序日志中:

2010-11-04 21:54:52,705 [tomcat-http--18] WARN util.JDBCExceptionReporter-SQL错误:0,SQLState:08S01
2010-11-04 21:54:52,707 [tomcat-http--18]错误util.JDBCExceptionReporter-套接字已关闭
2010-11-04 21:54:52,708 [tomcat-http--18]错误transaction.JDBCTransaction-JDBC回滚失败
java.sql.SQLException:连接已关闭。
    在org.apache.tomcat.jdbc.pool.ProxyConnection.invoke(ProxyConnection.java:112)
    在org.apache.tomcat.jdbc.pool.JdbcInterceptor.invoke(JdbcInterceptor.java:94)
    在org.apache.tomcat.jdbc.pool.interceptor.AbstractCreateStatementInterceptor.invoke(AbstractCreateStatementInterceptor.java:71)
    在org.apache.tomcat.jdbc.pool.JdbcInterceptor.invoke(JdbcInterceptor.java:94)
    在org.apache.tomcat.jdbc.pool.interceptor.ConnectionState.invoke(ConnectionState.java:132)
    在$ Proxy38.rollback(未知来源)
    在org.hibernate.transaction.JDBCTransaction.rollbackAndResetAutoCommit(JDBCTransaction.java:217)
    在org.hibernate.transaction.JDBCTransaction.rollback(JDBCTransaction.java:196)
    在org.springframework.orm.hibernate3.HibernateTransactionManager.doRollback(HibernateTransactionManager.java:676)
    在org.springframework.transaction.support.AbstractPlatformTransactionManager.processRollback(AbstractPlatformTransactionManager.java:845)
    在org.springframework.transaction.support.AbstractPlatformTransactionManager.rollback(AbstractPlatformTransactionManager.java:822)
    在org.springframework.transaction.interceptor.TransactionAspectSupport.completeTransactionAfterThrowing(TransactionAspectSupport.java:412)
    在org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:111)
    在org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
    在org.springframework.aop.framework.Cglib2AopProxy $ DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:625)

配置

<Resource defaultAutoCommit="false" defaultReadOnly="false"
        defaultTransactionIsolation="SERIALIZABLE"
        driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
        factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
        fairQueue="false" initialSize="10"
        jdbcInterceptors="ConnectionState;StatementFinalizer"
        jmxEnabled="true" logAbandoned="true" maxActive="100"
        maxIdle="10" maxWait="30000"
        minEvictableIdleTimeMillis="10000" minIdle="10"
        name="com.ourcompany.ap.shoppingcart/datasource"
        password="somePassword" removeAbandoned="true"
        removeAbandonedTimeout="60" testOnBorrow="true"
        testOnReturn="false" testWhileIdle="false"
        timeBetweenEvictionRunsMillis="5000"
        type="javax.sql.DataSource"
        url="jdbc:sqlserver://approd\approd;databaseName=prod"
        useEquals="false" username="AccessPointNet"
        validationInterval="30000" validationQuery="SELECT 1"/>`

问题答案:

Hibernate从基础连接池获得的数据库连接的责任是什么。

不多,当Session关闭时释放它。

它在连接使用之前是否进行测试以查看连接是否已关闭?如果是这样,从池中获得另一个连接?

不,Hibernate不会,如果需要,检查连接的有效性是连接池的责任。

我在下面添加了错误和确认信息。我可以从哪里开始解决此问题的任何想法将非常有帮助。

您究竟在执行哪种流程?长时间的交易?是否超时?什么是 Caused by: 说什么?关于跟踪:

2010-11-04 21:54:52,705 [tomcat-http--18] WARN util.JDBCExceptionReporter-SQL错误:0,SQLState:08S01 
2010-11-04 21:54:52,707 [tomcat-http--18]错误util.JDBCExceptionReporter-套接字已关闭
2010-11-04 21:54:52,708 [tomcat-http--18]错误transaction.JDBCTransaction-JDBC回滚失败java.sql.SQLException:连接已关闭。

您可以确定性地重现它吗?有网络问题吗?

以及有关我们正在使用的SQL Server驱动程序设置的任何建议。

我在下面添加了有关Tomcat和连接池配置的大量资源。虽然不特定于SQL Server。

资源资源

  • 配置jdbc-pool以实现高并发性


 类似资料:
  • 问题内容: 如何检查服务器上发送的邮件有问题?我运行一个简单的测试: 测试输出哪个文本;但是,没有邮件到达。 我该如何追踪问题? 问题答案: 这是一个很长的故事。一些要点(假设mail()返回true,并且错误日志中没有错误): 发件人地址(“发件人”)是否属于您服务器上的域?如果不是,请这样做。 您的服务器是否列入黑名单(例如,在spamhaus.org上检查IP)?共享托管的可能性很小。 邮件

  • 问题内容: 我有一个名为Main.java的Java程序,它位于以下目录中: 当我尝试从“程序”目录运行Main.java时,一切正常,我使用了以下行: 但是当我尝试从主目录运行Main.java时: 我得到: 此错误的原因是什么? 问题答案: 这是由于您的类路径所致,该类路径将默认为当前目录。从中运行时,在当前目录中找到该类(因为该软件包似乎未设置,这意味着它是默认值)。因此,它在中找到类。 从

  • 问题内容: 我已经按照本教程http://www.dsl.uow.edu.au/~sk33/php5java.htm进行了操作,但最后还是尝试了 我有这个例外 PHP致命错误:未捕获[o(Exception):“ java.lang.Exception:CreateInstance失败:new HelloWorld。原因:java.lang.ClassNotFoundException:在java

  • 问题内容: 如果我在闲置了一段时间后启动应用程序,那么我曾经遇到以下错误。(我正在使用Spring + Hibernate + MySQL作为DB) 我通过将以下内容添加到我的servlet-context.xml中解决了这个问题。 我在这里问了这个问题,这个问题是解决方案所特有的。我需要知道为什么会遇到这个错误。 我尝试了上面链接中提供的第一个选项(使用autoReconnect = true配

  • 问题内容: 自上次发布以来,是否提出了所有建议的更改,但此问题仍然困扰着我。这是我得到的错误: 这是我的hibernate.cfg.xml 和c3p0.properties 问题答案: 对于我来说,您配置的c3p0错误。 诸如c3p0.preferredTestQuery之类的属性必须位于类路径中的c3p0.properties文件中(例如WEB-INF / classes)。 下面是我的c3p0