1
resposta

Pool de Conexão não funciona

Boa noite.

Alguém saberia dizer o motivo pelo qual o pool de conexão não está funcionando? Pois quando solicito mais conexões acima do que o limite configurado no pool, o mySQL continua abrindo conexões, e com isso causando estouro do número máximo de conexões permitido no banco de dados. Segue minha classe conection factory:

import java.sql.Connection; import java.sql.SQLException;

import javax.sql.DataSource;

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class ConnectionFactory {

public DataSource dataSource;

public ConnectionFactory() {

    ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource();
    comboPooledDataSource.setJdbcUrl("jdbc:mysql://localhost/loja_virtual?useTimeZone=true&serverTimeZone=UTC");
    comboPooledDataSource.setUser("root");
    comboPooledDataSource.setPassword("root");

    comboPooledDataSource.setMaxPoolSize(3);
    comboPooledDataSource.setMaxConnectionAge(10);

    this.dataSource = comboPooledDataSource;

}

public Connection recuperaConexao() throws SQLException {

    return dataSource.getConnection();
}

}

OBS: O mesmo ocorre quando uso JPA e decido usar o pool de conexões apresentado neste curso.

1 resposta

Olá Thiago, tudo bem? Peço desculpas pelo demora no retorno! Isso é bastante estranho, fiz um teste rápido aqui e funciona normal, o resultado foi:

1
2

2
1

3
0

Ele só abre no máximo 3 conexões, o código que utilizei no DataSource foi:

    @Bean
    public DataSource getDataSource() throws PropertyVetoException {
        ComboPooledDataSource dataSource = new ComboPooledDataSource();

        dataSource.setDriverClass("com.mysql.cj.jdbc.Driver");
        dataSource.setUser("root");
        dataSource.setPassword("");
        dataSource.setJdbcUrl("jdbc:mysql://localhost/projeto_jpa");

        dataSource.setMaxPoolSize(3);
        dataSource.setMaxConnectionAge(10);

        return dataSource;
    }

E o teste ficou da seguinte forma:

public class TestaPool {

    public static void main(String[] args) throws PropertyVetoException, SQLException {

        ComboPooledDataSource dataSource = (ComboPooledDataSource) new JpaConfigurator().getDataSource();

        for (int i = 0; i < 10; i++) {
            Connection connection = dataSource.getConnection();

            System.out.println(dataSource.getNumBusyConnections());
            System.out.println(dataSource.getNumIdleConnections());
            System.out.println();

        }
    }

}

Então, você tentou utilizar sem informar o setMaxConnectionAge? Poderia tentar e falar pra gente o resultado?!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software