【发布时间】:2012-11-21 11:26:49
【问题描述】:
当我启动我的应用程序时,我测试我的内部数据库是否正常,如下所示:
HibernateUtil.beginTransaction();
这是一个 H2 数据库。我正在使用带有 c3p0 池的 Hibernate。
问题是需要 一分钟 才能确定它不能成为交易,我希望它在 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 秒来获得一个 Session(不清楚它是如何获得一个 Session,因为数据库已损坏),然后是 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
所以主要问题似乎是当数据库损坏时(某种程度上)获得一个会话需要很长时间
【问题讨论】:
-
这个帖子对你有帮助吗? stackoverflow.com/questions/635047/…
-
谢谢,帮助但不能解决问题。
标签: java database hibernate h2 c3p0