[Java] BasicDataSource no establece las conexiones iniciales indicadas

willy_chaos

Hola a todos, este finde me he propuesto mirar de como trabajar / usar un pool de conexiones a la base de datos. He usado la class BasicDataSource para ello y me encuentro que no termina de hacer caso bien bien al metodo setInitialSize https://commons.apache.org/proper/commons-dbcp/api-1.4/org/apache/commons/dbcp/BasicDataSource.html#setInitialSize(int)

Me explico, el "programa" realiza la siguiente accion:

  • Pide 2 conexiones a la pool
  • Espera 10 segundos
  • Ejecuta 2 insert (1 con autocommit, el otro no)
  • Espera 10 segundos
  • Hace un commit para el que no tiene autocommit.
  • Cierra conexiones

Esto lo hago asi, para que me de tiempo de sobras en el phpmyadmin a ver las conexiones establecidas con la base de datos, y estos son los resultados obtenidos (para el usuario desde la app)

  • Si le pongo 2 conexiones, en phpmyadmin veo 2 conexiones establecidas
  • Si le pongo 5 conexiones, en phpmyadmin veo 5 conexiones establecidas
  • Si le pongo 10 conexiones, en phpmyadmin veo 8! conexiones establecidas
  • Si le pongo >10 conexiones, en phpmyadmin veo 8! conexiones establecidas

Como puede ser esto, en teoria el setInitialSize, tal y como indica la documentacion establece las conexiones (siempre que ese metodo se llame antes de realizar el primer getConnection). Os dejo el código que tengo hecho.

PoolConnectionsManager
MainClass
sh31k

Has comprobado en la configuración de mysql el número de conexiones?

1 respuesta
willy_chaos

#2 cierto, no había caido en la configuración del mysql service...

Vale veo que hay que modificar el my.cnf el max_connections y en todo caso tambien el max_user_connections. Y si quiero limitar a ese usuario supongo que ya tengo que ponerle en los permisos a ese usuario la limitacion.

Cuando llegue a casa lo pruebo de nuevo.

Edit:

Ademas de añadirle al pool de conexiones en la configuracion las siguientes lineas.

bds_Asterisk.setMaxTotal(100);

Cosa que no me he dado cuenta hasta un rato largo viendo porque aun indicandole a la MySQL el max_user_connections = 100, no me dejaba mas de 8 conexiones establecidas para ese usuario.

1

Usuarios habituales

  • willy_chaos
  • sh31k