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