zoukankan      html  css  js  c++  java
  • 【Java Web开发学习】DataSource获取的Connection要不要关闭

    先给答案:要关闭

    官方文档:https://docs.oracle.com/javase/tutorial/jdbc/basics/sqldatasources.html#pooled_connection

    我们以 HikariDataSource 为例子

    @Autowired
    DataSource dataSource;
    
    Connection con = dataSource.getConnection();
    con.close();

    dataSource 会注入 HikariDataSource 对象,该对象实现了DataSource接口

    public class HikariDataSource extends HikariConfig implements DataSource, Closeable

    dataSource.getConnection() 获取的连接是一个代理对象 com.zaxxer.hikari.pool.ProxyConnection,看下close方法,并不是真的关闭了TCP连接,而是回收了。

       @Override
       public final void close() throws SQLException
       {
          // Closing statements can cause connection eviction, so this must run before the conditional below
          closeStatements();
    
          if (delegate != ClosedConnection.CLOSED_CONNECTION) {
             leakTask.cancel();
    
             try {
                if (isCommitStateDirty && !isAutoCommit) {
                   delegate.rollback();
                   lastAccess = currentTime();
                   LOGGER.debug("{} - Executed rollback on connection {} due to dirty commit state on close().", poolEntry.getPoolName(), delegate);
                }
    
                if (dirtyBits != 0) {
                   poolEntry.resetConnectionState(this, dirtyBits);
                   lastAccess = currentTime();
                }
    
                delegate.clearWarnings();
             }
             catch (SQLException e) {
                // when connections are aborted, exceptions are often thrown that should not reach the application
                if (!poolEntry.isMarkedEvicted()) {
                   throw checkException(e);
                }
             }
             finally {
                delegate = ClosedConnection.CLOSED_CONNECTION;
                poolEntry.recycle(lastAccess);
             }
          }
       }
  • 相关阅读:
    Python3笔记029
    Python3笔记028
    Python3笔记027
    Python3笔记026
    Python3笔记025
    Python3笔记024
    find the oracle logs
    asm command
    网上看到的一个朋友写的不错收藏着.
    在IBM AIX上安装Oracle RAC ,很多人都在找的东东.....
  • 原文地址:https://www.cnblogs.com/yangchongxing/p/15256121.html
Copyright © 2011-2022 走看看