Mysql
 sql >> база данни >  >> RDS >> Mysql

JDBC MySql практики за обединяване на връзки, за да се избегне изчерпаният пул за връзки

Изключението показва типичен случай на код на приложение, който пропуска връзки към базата данни. Трябва да сте сигурни, че придобиватеи затворете всички от тях (Connection , Statement и ResultSet ) в try-with-resources блок в същия метод блок според нормалния JDBC идиом.

public void create(Entity entity) throws SQLException {
    try (
        Connection connection = dataSource.getConnection();
        PreparedStatement statement = connection.prepareStatement(SQL_CREATE);
    ) { 
        statement.setSomeObject(1, entity.getSomeProperty());
        // ...
        statement.executeUpdate();
    }
}

Или когато не сте на Java 7, в try-finally блок. Затварянето им в finally ще гарантира, че те също ще бъдат затворени в случай на изключения.

public void create(Entity entity) throws SQLException {
    Connection connection = null;
    PreparedStatement statement = null;

    try { 
        connection = dataSource.getConnection();
        statement = connection.prepareStatement(SQL_CREATE);
        statement.setSomeObject(1, entity.getSomeProperty());
        // ...
        statement.executeUpdate();
    } finally {
        if (statement != null) try { statement.close(); } catch (SQLException logOrIgnore) {}
        if (connection != null) try { connection.close(); } catch (SQLException logOrIgnore) {}
    }
}

Да, все още трябва сами да затваряте връзки, дори когато използвате пул на връзки. Често срещана грешка сред стартиращите е, че смятат, че след това автоматично ще се справи със затварянето. Товане е вярно . Пулът за връзки именно връща обвита връзка, която прави нещо като следното в close():

public void close() throws SQLException {
    if (this.connection is still eligible for reuse) {
        do not close this.connection, but just return it to pool for reuse;
    } else {
        actually invoke this.connection.close();
    }
}

Ако не ги затворите, връзката няма да бъде освободена обратно в пула за повторна употреба и по този начин тя ще придобива нова отново и отново, докато DB изчерпи връзките, което ще доведе до срив на приложението ви.

Вижте също:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Информация за базата данни information_schema в MySQL

  2. Как да се свържете с MySQL или MariaDB база данни

  3. Съхранена процедура с незадължителни параметри WHERE

  4. Как мога да импортирам база данни с MySQL от терминал?

  5. Какво представлява MySQL еквивалентът на функцията CHOOSE() на SQL Server?