アプリケーションを起動するときに、内部データベースを次のようにテストします。
HibernateUtil.beginTransaction();
これはH2データベースです。私はc3p0プーリングでHibernateを上に使用しています。
問題は、トランザクションではないと判断するのに1分かかることです。10秒以内に再試行してください。c3p0プロパティを確認しましたが、これを行うものは何も表示されません。
*更新* コメントにより、HibernateUtil.beginTransaction()が私が行っていたことを隠していることに気づきました。
System.out.println("Get Session"+new Date());
Session session = com.jthink.songlayer.hibernate.HibernateUtil.getSession();
System.out.println("Get Txn"+new Date());
Transaction t = session.getTransaction();
System.out.println("Set Timeout"+new Date());
t.setTimeout(10);
System.out.println("Begin Txn"+new Date());
session.beginTransaction();
System.out.println("Commit"+new Date());
t.commit();
出力は
Get SessionWed Nov 21 12:15:56 GMT 2012
Get TxnWed Nov 21 12:16:27 GMT 2012
Set TimeoutWed Nov 21 12:16:27 GMT 2012
Begin TxnWed Nov 21 12:16:27 GMT 2012
FailedWed Nov 21 12:16:46 GMT 2012
したがって、セッションの取得に30秒(データベースが破損しているためにセッションを取得する方法が不明)に費やされ、その後19秒でトランザクションを開始しようとしているようです。
一方、データベースに問題がない場合、タイミングは数秒です
Get SessionWed Nov 21 12:23:57 GMT 2012
Get TxnWed Nov 21 12:23:59 GMT 2012
Set TimeoutWed Nov 21 12:23:59 GMT 2012
Begin TxnWed Nov 21 12:23:59 GMT 2012
CommitWed Nov 21 12:23:59 GMT 2012
したがって、主な問題は、dbが破損しているときに(ある種の)セッションを取得するのに長い時間がかかることであるように思われます