gpt4 book ai didi

java - 与 Spring 的 Tomcat jdbc 池

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:57:52 25 4
gpt4 key购买 nike

我收到这个警告:

WARNING:[PoolCleaner[661646649:1440675349770]] org.apache.tomcat.jdbc.pool.ConnectionPool.abandon 
Connection has been abandoned PooledConnection[org.postgresql.jdbc4.Jdbc4Connection@7c9e8e2e]:
java.lang.Exception

对于应用程序,我使用带有 Tomcat JDBC 池和 Postgres 作为数据库的 spring 框架。我的配置文件:

<bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource" destroy-method="close">
<property name="driverClassName" value="org.postgresql.Driver" />
<property name="url" value="jdbc:postgresql://ip/db" />
<property name="username" value="user" />
<property name="password" value="pass" />
<property name="initialSize" value="5" />
<property name="maxActive" value="10" />
<property name="maxIdle" value="10" />
<property name="testOnBorrow" value="true" />
<property name="validationInterval" value="30000" />
<property name="minIdle" value="5" />
<property name="removeAbandoned" value="true" />
<property name="removeAbandonedTimeout" value="60" />
<property name="logAbandoned" value="true" />
<property name="validationQuery" value="SELECT 1" />
<property name="initSQL" value="SET application_name = 'app'" />
</bean>

问题来了。根据我的理解,removeAbandoned 应该只放弃使用超过 60 秒的连接,即运行超过 60 秒的查询。我根本没有这样的疑问。但是我与池的连接被放弃了。

我怀疑 removeAbandoned 正在删除池中的空闲连接。虽然它不应该这样做。在我的应用程序中,我通过这种方式获得连接:

//i am using autowiring.
@Autowired
private DataSource dataSource;
//and in my methods i use it this way:
Connection conn = dataSource.getConnection();
//and i am closing it after method completion
//maybe i should not??
conn.close()

更新:我发现了错误。我的 Connection 变量是全局的,我将它设为方法的本地变量,一切正常。同样通过 Apache 基准测试,使用了池化。 (连接已更新,由 pg_stat_activity 看到)。感谢您的回复。

最佳答案

如果连接在 X 秒(超时)内没有被使用并且没有返回到池中,它被认为是被放弃的,即行为不当的代码使连接保持打开状态(或者更确切地说没有不要把它放回池子里)。

空闲连接不会被丢弃(或者至少它们不应该被丢弃),因为它们没有被使用。

它要么是连接池中的错误(不太可能用于此类标准功能),要么是某处连接使用不当。这可能并不明显。

您还可以从 Postgres 端监控连接,使用 select * FROM pg_stat_activity;。您应该清楚地看到在池中等待的那些,因为它们显示了 SELECT 1 验证查询。

关于java - 与 Spring 的 Tomcat jdbc 池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32249485/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com