如何将Tomcat配置为不使用数据库连接池

时间:2017-01-30 20:59:04

标签: mysql tomcat jdbc

如何将Tomcat配置为使用数据库连接池?

我想这样做是因为我有一个应用程序,它对mysql数据库的调用很少,通常在24小时内少于10次,有些调用在检索连接时失败。似乎Mysql有时会放弃连接,因为它已经闲置了很长时间而没有告诉数据库更加冷静。

值得注意的是,我有另一个应用程序向完全相同的数据库发出数千个请求,但这绝不会失败,因此我确信该问题与调用数据库的罕见性有关。 Mysql可能是问题的一部分,但更新到Postgres将是一项比我现在想要承诺的更大的任务。

所以我尝试将context.xml配置为testWhileIdle,但它是失败的

<Context path="/store" privileged="true">
    <Resource name="jdbc/myapp" auth="Container" type="javax.sql.DataSource"
              maxActive="100" maxIdle="100" maxWait="10000" testWhileIdle="true"
              username="usrnm" password="pwd" driverClassName="com.mysql.jdbc.Driver"
              url="jdbc:mysql://localhost:3306/myapp"/>

</Context>

所以现在我想禁用池,所以它每次都得到一个新的连接,但我不知道怎么做,我看了

https://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html#Plain_Ol%27_Java

但似乎所有内容都集中在数据库池中。

尝试解决方案

所以我在回答中尝试了建议,并会看到未来几天会发生什么

     <Context path="/store" privileged="true">
            <Resource name="jdbc/myapp" auth="Container" type="javax.sql.DataSource"
                      maxActive="10" maxIdle="10" 
    testWhileIdle="true" validationQuery="select 1" validationQueryTimeout="5"
                      username="usrnm" password="pwd" 
driverClassName="com.mysql.jdbc.Driver" testOnBorrow="true"
                      url="jdbc:mysql://localhost:3306/myapp"/>

        </Context>

1 个答案:

答案 0 :(得分:0)

没有什么可以阻止你建立自己的联系并使用它们。但是,我认为您缺少配置以使连接验证正常工作。当测试连接并发现连接错误时,应在池之前替换为新连接,以便为您提供连接。我认为你缺少在测试连接时会使用的validationQuery。查看https://tomcat.apache.org/tomcat-8.0-doc/jdbc-pool.html处的文档,并查看为验证提供必要的值。尝试testOnBorrow和validationQuery,这样每次进行连接时,它都会在返回之前对其进行验证。此外,您似乎根据您的使用频率设置了太多连接。调整应该有助于避免不必要的连接打开。