当前位置: 首页 > 知识库问答 >
问题:

PostgreSQL JDBC驱动程序logUnclosedConnections不工作

滕弘新
2023-03-14
public static void main( String[] args ) throws Exception {

    Properties dbProps = new Properties();
    dbProps.setProperty( "user", "xxxxxxx" );
    dbProps.setProperty( "password", "xxxxxxxxxx" );
    dbProps.setProperty( "logServerErrorDetail", "true" );
    dbProps.setProperty( "logUnclosedConnections", "true" );
    dbProps.setProperty( "loggerLevel", "DEBUG" );

    Connection conn = DriverManager.getConnection( "jdbc:postgresql://xxxxx.xxxxx.xxx:xxx/xxxxx", dbProps );

    try {
        PreparedStatement pstmt = conn.prepareStatement( "select count(*) from xx.xx limit 10" );

        ResultSet rSet = pstmt.executeQuery();

        while ( rSet.next() ) {
            System.out.println( "count is " + rSet.getInt( 1 ) );

        }

    } catch ( Exception e ) {

        e.printStackTrace();
    }
}
count is 687
Sep 08, 2021 12:21:44 PM org.postgresql.Driver connect
FINE: Connecting with URL: jdbc:postgresql://xxxxx.xxxx.xxxx:xxx/xxxx
Sep 08, 2021 12:21:44 PM org.postgresql.jdbc.PgConnection <init>
FINE: PostgreSQL JDBC Driver 42.2.23
Sep 08, 2021 12:21:44 PM org.postgresql.jdbc.PgConnection setDefaultFetchSize
FINE:   setDefaultFetchSize = 0
Sep 08, 2021 12:21:44 PM org.postgresql.jdbc.PgConnection setPrepareThreshold
FINE:   setPrepareThreshold = 5
Sep 08, 2021 12:21:44 PM org.postgresql.core.v3.ConnectionFactoryImpl openConnectionImpl
FINE: Trying to establish a protocol version 3 connection to xxxx.xxxx.xxx:xxx
Sep 08, 2021 12:21:44 PM org.postgresql.core.v3.ConnectionFactoryImpl tryConnect
FINE: Receive Buffer Size is 65,536
Sep 08, 2021 12:21:44 PM org.postgresql.core.v3.ConnectionFactoryImpl tryConnect
FINE: Send Buffer Size is 65,536
Sep 08, 2021 12:21:44 PM org.postgresql.ssl.MakeSSL convert
FINE: converting regular socket connection to ssl

没有关于未关闭连接的报告。

public static void main( String[] args ) throws Exception {

    Properties dbProps = new Properties();
    dbProps.setProperty( "user", "postgres" );
    dbProps.setProperty( "password", "AuR0ra$dba#$" );
    dbProps.setProperty( "logServerErrorDetail", "true" );
    dbProps.setProperty( "logUnclosedConnections", "true" );
    dbProps.setProperty( "loggerLevel", "DEBUG" );

    Connection conn = DriverManager.getConnection( "jdbc:postgresql://devdbmaster.koncert.com:5499/dev_koncert_v10.5", dbProps );

    try {

        for ( int i = 0; i < 100; i++ ) {
            PreparedStatement pstmt = conn.prepareStatement( "select count(*) from cl.users limit 10" );

            ResultSet rSet = pstmt.executeQuery();

            while ( rSet.next() ) {
                System.out.println( "count is " + rSet.getInt( 1 ) );

            }

            Thread.sleep( 10 );
        }

    } catch ( Exception e ) {

        e.printStackTrace();
    }
    conn = null;
    System.gc();
    Thread.sleep( 1 );
}

按照@gus和@stephen C的建议,在system.gc()之前添加了conn=null;

共有1个答案

松越
2023-03-14

根据PostgreSQL JDBC驱动程序文档:

LogUnclosedConnections=Boolean

客户端可能会通过未能调用close()方法而泄漏connection对象。最终,这些对象将被垃圾收集,并调用finalize()方法,如果调用者自己忽略了关闭连接。终结器的使用只是权宜之计。

    null
  rRet = null;
  pstmt = null;
  conn = null;
  System.gc();
  Thread.sleep(1);

system.gc()语句要求JVM运行GC。

thread.sleep(1)语句等待下一秒...以便JVM有机会在JVM结束之前运行连接终结器。

我在引号中说“工作”有几个原因:

 类似资料:
  • 我在JBoss EAP7上通过这个示例安装了mssql驱动程序。启动将引发以下错误: 由:java.lang.noClassDefFounderRor:javax/xml/bind/datatypeConverter at com.microsoft.sqlserver.jdbc.sqlServerConnection.sendLogon(SqlServerConnection.java:4098

  • 我是一个新的Appium和尝试的android设备,所以在编写代码时,我想使用android驱动程序,但每次出现错误,请检查下面的错误 “线程”main“org.openqa.selenium.WebDriverException中出现异常:返回的值无法转换为WebElement:{element=1}生成信息:版本:”3.4.0“,修订:”unknown“,时间:”unknown“系统信息:主机

  • 我已经安装了一个MongoDB驱动程序,但事情显然是错误的,因为它不工作。这就是我所做的: pecl/mongodb已经安装,与发布的版本1.1相同。七, 返回已安装MongoDB 另外,var_dump(扩展_加载('mongodb');返回为true。 当我执行“php composer.phar update”时,我得到以下消息: root@debian:/var/www/html#phpc

  • 目前是否已知 Google 云端硬盘 API 示例命令行应用(云端硬盘命令行)可以正常工作?我已经下载了 Java 客户机库,并编译了示例应用程序(插入通过指定“已安装的应用程序”和“其他”创建的应用程序的客户机标识和密钥)。它运行并通知我在浏览器中访问以下链接: https://accounts.google.com/o/oauth2/auth?access_type=online (显然我的实

  • 问题内容: 输出 >无法连接到数据库服务器java.lang.ClassNotFoundException 问题答案: 看来您应该将MySQL驱动程序jar放入 类路径中 。

  • 问题内容: 我刚刚用Apache,MySQL和PHP安装了Debian Lenny,并且收到了PDOException 。 这是它所指的特定代码行: ,,,和是我所定义的常量。它在生产服务器(以及我以前的Ubuntu Server设置)上运行良好。 这与我的PHP安装有关吗? 搜索互联网没有帮助,我得到的只是专家交流和示例,但没有解决方案。 问题答案: 您需要有一个名为pdo_mysql的模块。在