Java 关闭的连接在postgres中保持空闲

Java 关闭的连接在postgres中保持空闲,java,spring,postgresql,tomcat,connection-pooling,Java,Spring,Postgresql,Tomcat,Connection Pooling,问题:如下创建的关闭连接在postgres数据库中保持idle public class MyConnectionHandler() implements AutoCloseable { private Connection connection; private CopyManager copymanager; public void init() { //need the following in order to work with postgre

问题:如下创建的关闭连接在
postgres
数据库中保持
idle

public class MyConnectionHandler() implements AutoCloseable {
    private Connection connection;
    private CopyManager copymanager;

    public void init() {
        //need the following in order to work with postgres COPY api
        connection = ((PooledConnection) dataSource.getConnection()).getConnection();
        copymanager = ((Jdbc4Connection) connection).getCopyAPI();
    }

    @Override
    public void close() {
        connection.close();
    }
}
我在
springboot
的上下文中使用由
tomcatjdbc
提供的tomcat池。但这对我的问题并不重要:

当我创建连接并随后将其关闭时,该连接在我的数据库中仍然处于空闲状态<代码>从pg_stat_activity中选择*在那里我仍然可以看到连接,尽管它们是显式关闭的

这意味着,如果我在一天中创建了大约10个连接,并在一段时间后关闭它们,这些连接将持续增长。它们永远不会从数据库中删除

有什么问题吗?为什么即使它们关闭,它们仍处于空闲状态? 只有当我关闭java程序时,连接才会被删除(当然)

我还尝试在不影响空闲连接的情况下设置以下spring属性:

spring.datasource.initial-size=1
spring.datasource.max-idle=1
spring.datasource.min-idle=1

“但这对我的问题不重要”——事实上,这很重要。因为您从池中获取连接,所以
close()
方法只会将它们“放回”池中。连接池的用途之一是不永久打开和关闭物理连接。您需要配置连接池,例如在特定空闲时间后关闭连接池。您需要阅读正在使用的连接池(DBCA、Tomcat7池等)的手册是的,您是对的,但是如果我初始化liek 200连接并直接关闭它们,它们在数据库中都将保持空闲。spring还提供了控制连接池的属性。我在上面的更新中尝试了将属性限制为单个连接,不管怎样,在关闭所有创建的连接后,这些连接仍然处于空闲状态……再说一遍:连接池就是这样工作的。您需要向我们展示池的配置。到目前为止,一切正常。池类是
org.apache.tomcat.jdbc.pool.DataSource
,spring按照#DataSource中的说明配置池。感谢您对连接池的提示。有了这个帮助,我可以确定根本原因:我检查了
datasource.getConnection()instanceof…
,但这导致了未关闭的连接。当然,最好在成员变量中保存连接对象后执行instancecheck,该变量稍后关闭。。。