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

使用DBCP的Tomcat配置

谢英光
2023-03-14
问题内容

经过一会儿(几个小时)后,我们从DBCP获得了CommunicationsException。错误消息(位于“异常”中)在此问题的末尾-
但我看不到任何配置文件中定义的wait_timeout。(我们应该看哪里?在tomcat / conf目录之外的某个地方?)。

其次,如异常所建议,将“ Connector / J连接属性’autoReconnect = true’”放在哪里?这是在Tomcat中设置的conf /
context.xml文件中的资源定义:

<Resource name="jdbc/TomcatResourceName" auth="Container" type="javax.sql.DataSource"
           maxActive="100" maxIdle="30" maxWait="10000"
           removeAbandoned="true" removeAbandonedTimeout="60" logAbandoned="true"
           username="xxxx" password="yyyy"
           driverClassName="com.mysql.jdbc.Driver"
           url="jdbc:mysql://127.0.0.1:3306/dbname?autoReconnect=true"/>

第三,为什么JVM等待直到对executeQuery()的调用引发异常?如果连接超时,则getConnection方法应该抛出Exception,不是吗?这是我正在谈论的源代码部分:

        try {
                conn = getConnection (true);
                stmt = conn.createStatement (ResultSet.TYPE_SCROLL_INSENSITIVE,
                                                ResultSet.CONCUR_READ_ONLY);
                rset = stmt.executeQuery (bQuery);
                while (rset.next()) {
                     ....

最后,这是堆栈跟踪的第一行…

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully received from the server was 84,160,724 milliseconds ago.  The last packet sent successfully to the server was 84,160,848 milliseconds ago. is longer than the server configured value of 'wait_timeout'. You should consider either expiring and/or testing connection validity before use in your application, increasing the server configured values for client timeouts, or using the Connector/J connection property 'autoReconnect=true' to avoid this problem.
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:532)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1074)
at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:3291)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1938)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2107)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2642)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2571)
at com.mysql.jdbc.StatementImpl.executeQuery(StatementImpl.java:1451)
at org.apache.tomcat.dbcp.dbcp.DelegatingStatement.executeQuery(DelegatingStatement.java:208)

这就是我们中的一些人认为“忘记dbcp的原因,它可能过于依赖IDE配置和高级功能,以至于DriverManager.getConnection(…)可能更可靠”。对此有何评论?谢谢您的见解-
MS


问题答案:

由于DBCP会为即将到来的连接请求保留返回的mysql连接的打开状态,因此它们成为MySQL
Server超时的
受害者。

DBCP具有许多可以提供帮助的功能(可以从Tomcat 5.5 IIRC开始使用)。

validationQuery="SELECT 1"
testOnBorrow="true"

验证可确保连接有效,然后再将其返回到执行“借阅”方法的Web应用程序。该标志当然会启用此功能。

如果超时(我相信是8个小时)已经过去并且连接已死,则将测试新的连接(如果不再存在,则创建该连接)并将其提供给webapp。

其他可能的方法:

  1. testWhileIdle="true"在资源设置中使用DBCP还可以在检测到有效请求之前检查空闲连接。

  2. 使用’connectionProperties’加强您的MySQL连接(例如autoReconnect/autoReconnectForPools=true



 类似资料:
  • 尝试遵循apache dbcp示例的模式,我了解所有内容,除了数据库属性如何以及从哪里来以及它们必须放在应用程序上下文中的哪个bean中。 我改用了Spring数据源,但我记得我很匆忙地配置了它,我记得在配置ApacheDBCP本身提供的原始数据源时遇到了困难。所以我正好有时间面对这个问题,并实现使用PoolgDataSource的初衷。 我使用Spring实现的原因是,它提供了设置参数以连接到数

  • 问题内容: 您能帮助我使用Tomcat配置Apache Solr以及如何使用Solr在MS SQL数据库中建立索引。配置Tomcat以在Tomcat中运行Apache Solr的步骤是什么。 问题答案: 这是有帮助的分步过程。 第1部分:使用TOMCAT设置SOLR 步骤1:下载Solr。这只是一个zip文件。 步骤2:从SOLR_HOME_DIR / dist / apache-solr-1.3

  • 问题内容: 有人可以解释如何使用完全准备好的使用dbcp的连接池吗?(如果可能,请提供一些示例代码)。我已经弄清楚了如何打开它- 将KeyedObjectPoolFactory传递给PoolableConnectionFactory。但是,那之后如何定义特定的准备好的语句呢?现在,我仅使用PoolingDataSource从池中获取连接。如何使用池中准备好的语句? 问题答案: 在谈论从池中获得连接

  • 我正在尝试使用Kerberos在Tomcat9(使用SDK8)中配置SSO。我的环境都在Windows Server 2016 VMS中:- null null 在tomcat服务器中,我创建了文件。/tomcat-9/conf/krb5.ini 我创建了文件。/tomcat-9/conf/jass.conf 到目前为止,在我找到的所有教程中,它都是相当一致的。从现在开始,far west和我对t

  • DBCP (Database Connection Pool)是一个依赖Jakarta commons-pool对象池机制的数据库连接池,Tomcat的数据源使用的就是DBCP。 Javadoc:http://tool.oschina.net/apidocs/apidoc?api=dbcp

  • Spring BootBOM不包含tomcat dbcp的依赖项。 我有一个Spring MVC项目,其中我使用数据库连接池进行HiberNate ORM连接。这个项目是在Tomcat中部署的。在我的IntelliJ创意开发环境中,我使用了嵌入的Tomcat,通过使用sping-boot-starter-Tomcat。但是sping-boot-starter-Tomcat没有定义对Tomcat-d