私は次のエラーに直面しています。この問題が発生している場所でデバッグするのは非常に困難です。Java SpringでC3P0デッドロック
<bean id="sessionFactory1"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="hibernateProperties">
<props>
<prop key="hibernate.connection.driver_class">${db.driver}</prop>
<prop key="hibernate.connection.url">${db.jdbcurl2}</prop>
<prop key="hibernate.connection.username">${db.username2}</prop>
<prop key="hibernate.connection.password">${db.password2}</prop>
<prop key="hibernate.connection.provider_class">org.hibernate.c3p0.internal.C3P0ConnectionProvider
</prop>
<prop key="hibernate.c3p0.min_size">1</prop>
<prop key="hibernate.c3p0.max_size">6</prop>
<prop key="hibernate.c3p0.maxIdleTime">3000</prop>
<prop key="hibernate.c3p0.timeout">5000</prop>
<prop key="hibernate.c3p0.max_statements">50</prop>
<prop key="hibernate.c3p0.idle_test_period">3000</prop>
<prop key="hibernate.c3p0.preferredTestQuery">SELECT 1</prop>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
<prop key="hibernate.show_sql" >false</prop>
<prop key="hibernate.format_sql" >false</prop>
<prop key="hibernate.hbm2ddl.auto" >update</prop>
</props>
</property>
</bean>
<bean id="sessionFactory2"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean" primary="true">
<property name="hibernateProperties">
<props>
<prop key="hibernate.connection.driver_class">${db.driver}</prop>
<prop key="hibernate.connection.url">${db.jdbcurl}</prop>
<prop key="hibernate.connection.username">${db.username}</prop>
<prop key="hibernate.connection.password">${db.password}</prop>
<prop key="hibernate.connection.provider_class">org.hibernate.c3p0.internal.C3P0ConnectionProvider
</prop>
<prop key="hibernate.c3p0.min_size">1</prop>
<prop key="hibernate.c3p0.max_size">6</prop>
<prop key="hibernate.c3p0.maxIdleTime">3000</prop>
<prop key="hibernate.c3p0.timeout">5000</prop>
<prop key="hibernate.c3p0.max_statements">50</prop>
<prop key="hibernate.c3p0.idle_test_period">3000</prop>
<prop key="hibernate.c3p0.preferredTestQuery">SELECT 1</prop>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
<prop key="hibernate.show_sql" >false</prop>
<prop key="hibernate.format_sql" >false</prop>
<prop key="hibernate.hbm2ddl.auto" >update</prop>
</props>
</property>
</bean>
そして、次の接続データ:
db.driver =はcom.mysql.jdbc.Driver
hibernate.dialect = org.hibernate私は、次の2セッションの工場があります。 dialect.MySQLDialect
db.jdbcurl = JDBCます。mysql:// localhostを:3306/XXXXautoReconnect =真& allowMultiQueries =真 db.username = XXXX
db.password = YYYY
db.jdbcurl2 = JDBCます。mysql://XXXXX-cluster.XXXXXXXX.eu-west-2.rds.amazonaws.com:?3306/XXXX自動再=真& allowMultiQueries =真
db.username2 = XXXX
db.password2 = YYYY
これは私がログから取得するエラーメッセージです:
2017-10-30 12:16:25 WARN ThreadPoolAsynchronousRunner:743 - com[email protected]6cf38f72 -- APPARENT DEADLOCK!!! Creating emergency threads for unassigned pending tasks!
2017-10-30 12:16:25 WARN ThreadPoolAsynchronousRunner:759 - com[email protected]6cf38f72 -- APPARENT DEADLOCK!!! Complete Status:
Managed Threads: 3
Active Threads: 3
Active Tasks:
com[email protected]5371f5ab
on thread: C3P0PooledConnectionPoolManager[identityToken->1bqsmig9ruavayon79lc0|319cb4da]-HelperThread-#0
com[email protected]12e0b3c5
on thread: C3P0PooledConnectionPoolManager[identityToken->1bqsmig9ruavayon79lc0|319cb4da]-HelperThread-#2
com[email protected]2b726e6f
on thread: C3P0PooledConnectionPoolManager[identityToken->1bqsmig9ruavayon79lc0|319cb4da]-HelperThread-#1
Pending Tasks:
com[email protected]432689e8
Pool thread stack traces:
Thread[C3P0PooledConnectionPoolManager[identityToken->1bqsmig9ruavayon79lc0|319cb4da]-HelperThread-#0,5,RMI Runtime]
java.net.PlainSocketImpl.socketConnect(Native Method)
java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
私はc3p0.max_statementsを0に設定しようとしましたが、他の多くのものはうまくいきませんでした。この問題を解決する方法を知っていれば、私はあなたの助けを求めています。
私は、2つのデータソースをローカルで使用していたときにうまく動作するために使用されていたことを言及する価値があると思います。私が新しいRDSインスタンスを作成し、jdbcurl URLをrdsに変更した分、上記のエラーメッセージが出ました。
ありがとうございます!
これは実際に問題が発生している場所で、今は1日間デバッグしていますが、なぜこれが起きているのかまだ分かりません。私はSequel ProとMySQLWorkbenchを通してRDSインスタンスに接続できましたが、私のJavaプログラムからではありません...私の接続URLはあなたと同じフォーマットですが、何らかの理由でタイムアウトしています。 – user3153278
編集:私逆方向トンネルを作成し、URL文字列を127.0.0.1に変更し、ポートを逆方向トンネルの1つに変更してローカルで動作させる必要がありました。 – user3153278