web-dev-qa-db-fra.com

Spring Boot MySQL JDBC Impossible de créer les connexions initiales du pool

Bonne journée!

J'ai une application simple springboot avec le référentiel mysql jdbc.

J'ai des propriétés pour me connecter à la base de données

spring.datasource.url=jdbc:mysql://*:3306/*?useSSL=false
spring.datasource.username=*
spring.datasource.password=*
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.initialize=true
spring.datasource.dbcp2.validation-query=SELECT 1
spring.datasource.dbcp2.max-total=1

Ma base de test n'a que 10 connexions maximum pour l'utilisateur. Quand j'utilise la console 

SHOW STATUS WHERE variable_name = 'threads_connected';

Je peux voir que maintenant la base de données n'a que 5 connexions, mais lorsque j'essaie de démarrer mon application, je reçois une exception. 

2018-02-28 10: 26: 24.115 ERREUR 17360 --- [nio-8080-exec-3] OaTomcat.jdbc.pool.ConnectionPool: impossible de créer les connexions Initiales du pool .

Java.sql.SQLSyntaxErrorException: l'utilisateur '*' a dépassé la ressource 'Max_user_connections' (valeur actuelle: 10)

Comment puis-je le réparer? Et pourquoi j’obtiens cette exception si j’ai 5 connexions gratuites sur la base de données et que je n’ai besoin que d’une seule connexion pour le pool à partir de propriétés? Je ne peux pas éditer le nombre maximal de connexions sur la base de données car Heroku est utilisé comme testDB. Je ne peux éditer que les propriétés de Tomcat

2
Lezenford

Vous avez configuré la propriété suivante:

spring.datasource.dbcp2.max-total=1

Cela indique que vous essayez d'utiliser le pool DBCP 2 . Cependant, lorsque vous vérifiez le stacktrace, vous pouvez voir ce qui suit:

o.a.Tomcat.jdbc.pool.ConnectionPool : Unable to create initial connections of pool.

Comme le package de la classe ConnectionPool est org.Apache.Tomcat, cela indique que vous utilisez réellement le pool de connexions Tomcat par défaut. Cela signifie que votre max-total poperty n'est pas pris correctement.

Si vous souhaitez configurer ceci pour un pool de connexions Tomcat, vous devez utiliser la propriété maxActive:

spring.datasource.Tomcat.max-active=1

Si vous ne souhaitez pas utiliser le pool de connexions Tomcat, vous pouvez également ajouter la dépendance DBCP 2 à l'aide de Maven/Gradle/.... Si vous excluez le pool de connexions Tomcat par défaut, le DBCP 2 sera automatiquement capturé. 

Une autre possibilité consiste à le configurer à l'aide de la propriété spring.datasource.type mentionnée par la documentation :

Vous pouvez contourner complètement cet algorithme et spécifier le pool de connexions à utiliser via la propriété spring.datasource.type. Ceci est particulièrement important si vous exécutez votre application dans un conteneur Tomcat, car Tomcat-jdbc est fourni par défaut.

Par exemple:

spring.datasource.type=org.Apache.commons.dbcp2.BasicDataSource
2
g00glen00b

J'étais coincé dans une situation similaire, mais la solution simple à cela pourrait ressembler à la base de données que vous indiquez dans application.properties n'existe probablement pas. 

Ou vous pouvez essayer de supprimer le dossier org.springframework.data du dossier C:\Users\User\.m2 et mettre à jour le projet Maven.

0
Manish Joshi