J'ai rencontré un problème lors de la configuration des paramètres c3p0. Le senario est: J'ai un projet Java qui commencera à 3h00 du matin tous les jours et ensuite se connecter à la base de données pour faire quelque chose. Parfois, la base de données peut être en panne à ce moment-là et peut être récupérée après 2 ou 3 heures.
Je dois donc faire en sorte que le programme essaie de reconnecter la base de données dans un intervalle de temps spécifique pour voir si la base de données est correcte, jusqu'à ce qu'elle puisse se connecter avec succès à la base de données. J'ai essayé de configurer le c3p0 pour reconnecter la base de données infiniment jusqu'à la réussite, mais il semble coincé dans une impasse. Voici mes paramètres c3p0. J'utilise c3p0 v0.9.1 avec hibernate dans Spring framework, la base de données est DB2.C3p0 n'a pas réussi à reconnecter la base de données lorsque la base de données est hors service
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" >
<property name="driverClass" value="${jdbc.driverClassName}"/>
<property name="jdbcUrl" value="${jdbc.url}"/>
<property name="user" value="root"/>
<property name="password" value="root"/>
<property name="acquireRetryAttempts" value="0"/>
<property name="acquireRetryDelay" value="10000"/>
<property name="maxIdleTime"value="60"/>
<property name="minPoolSize" value="5" />
<property name="maxPoolSize" value="200"/>
<property name="idleConnectionTestPeriod" value="30" />
<property name="preferredTestQuery" value="values(1)" />
</bean>
Quand je lance le programme, il a échoué et le journal d'erreur est indiqué ci-dessous:
[WARN]: com[email protected]21eb3f -- APPARENT DEADLOCK!!!
Creating emergency threads for unassigned pending tasks!
[WARN]: com[email protected]21eb3f -- APPARENT DEADLOCK!!!
Complete Status:
Managed Threads: 3
Active Threads: 3
Active Tasks:
[email protected]d (com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#0)
[email protected]c (com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#1)
[email protected]3 (com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#2)
Pending Tasks:
[email protected]4
[email protected]0
[email protected]
[email protected]2
[email protected]
[email protected]
[email protected]
Pool thread stack traces:
...
[WARN] [2017-09-04 ThreadPoolAsynchronousRunner.processReplacedThreads() ] Task [email protected]
(in deadlocked PoolThread) failed to complete in maximum time 60000ms. Trying interrupt().
[WARN] [2017-09-04 ThreadPoolAsynchronousRunner.processReplacedThreads() ] Task [email protected]
(in deadlocked PoolThread) failed to complete in maximum time 60000ms. Trying interrupt().
[WARN] [2017-09-04 ThreadPoolAsynchronousRunner.processReplacedThreads() ] Task [email protected]
(in deadlocked PoolThread) failed to complete in maximum time 60000ms. Trying interrupt().
[WARN] [2017-09-04 BasicResourcePool$AcquireTask.run()] [email protected] -- Thread unexpectedly interrupted
while performing an acquisition attempt.
java.lang.InterruptedException: sleep interrupted
at java.lang.Thread.sleep(Native Method)
at com.mchange.v2.resourcepol.BasicResourcePool$AcquireTask.run (BasicResourcePool.java:1805)
at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:547)
[WARN] [2017-09-04 BasicResourcePool$AcquireTask.run()] [email protected] -- Thread unexpectedly interrupted
while performing an acquisition attempt.
java.lang.InterruptedException: sleep interrupted
at java.lang.Thread.sleep(Native Method)
at com.mchange.v2.resourcepol.BasicResourcePool$AcquireTask.run (BasicResourcePool.java:1805)
at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:547)
[WARN] [2017-09-04 BasicResourcePool$AcquireTask.run()] [email protected] -- Thread unexpectedly interrupted
while performing an acquisition attempt.
java.lang.InterruptedException: sleep interrupted
at java.lang.Thread.sleep(Native Method)
at com.mchange.v2.resourcepol.BasicResourcePool$AcquireTask.run (BasicResourcePool.java:1805)
at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:547)
Pourriez-vous s'il vous plaît aider à corriger mes si les paramètres a quelque chose de mal? Merci d'avance!
Comment cette 'application' a-t-elle démarré? cron? –
@Scary Oui, c'est. – cmjauto
alors pouvez-vous essayer d'utiliser un outil, par exemple. db cli client, pour tester si la base de données est en place avant d'essayer de démarrer votre application et le mettre dans votre script de démarrage de l'application –