Java 如何捕获Hibernate数据库连接错误异常?
我在开发中使用Hibernate 3,并将Liberty配置文件用作本地开发服务器。我试图在DB服务器关闭时创建一个异常处理。为此,我正在尝试通过连接到Java 如何捕获Hibernate数据库连接错误异常?,java,hibernate,exception,Java,Hibernate,Exception,我在开发中使用Hibernate 3,并将Liberty配置文件用作本地开发服务器。我试图在DB服务器关闭时创建一个异常处理。为此,我正在尝试通过连接到hibernate.cfg.xml中的假IP地址来模拟环境,以进行此测试 我有下面的JAVA代码,但是当DB连接没有准备好时,异常代码中没有捕捉到异常。控制台输出显示无法获取连接,作为警告。我可以知道如何在异常代码中捕获场景,而不是将其显示为警告吗 JAVA代码 public class HibernateUtil { stat
hibernate.cfg.xml
中的假IP地址来模拟环境,以进行此测试
我有下面的JAVA代码,但是当DB连接没有准备好时,异常代码中没有捕捉到异常。控制台输出显示无法获取连接,作为警告。我可以知道如何在异常代码中捕获场景,而不是将其显示为警告吗
JAVA代码
public class HibernateUtil {
static {
try {
log.info("HibernateUtil.static - Begin");
if (cacheFactory.get("Factory") == null) {
sessionFactory = new Configuration().configure().buildSessionFactory();
cacheFactory.put("Factory", sessionFactory);
} else {
sessionFactory = (SessionFactory) cacheFactory.get("Factory");
}
log.info("HibernateUtil.static - end");
} catch (HibernateException ex) {
throw new RuntimeException("[Exception] : " + ex.getMessage(), ex);
}
}
...
...
}
控制台输出
INFO 2012-09-20 15:24:16,314 [HibernateUtil.java:37] - HibernateUtil.static - Begin
[WARNING ] recognized obsolete hibernate namespace http://hibernate.sourceforge.net/. Use namespace http://www.hibernate.org/dtd/ instead. Refer to Hibernate 3.6 Migration Guide!
[WARNING ] Property [hibernate.cglib.use_reflection_optimizer] has been renamed to [hibernate.bytecode.use_reflection_optimizer]; update your properties appropriately
[WARNING ] recognized obsolete hibernate namespace http://hibernate.sourceforge.net/. Use namespace http://www.hibernate.org/dtd/ instead. Refer to Hibernate 3.6 Migration Guide!
[WARNING ] Property [hibernate.cglib.use_reflection_optimizer] has been renamed to [hibernate.bytecode.use_reflection_optimizer]; update your properties appropriately
[WARNING ] Could not obtain connection to query metadata
INFO 2012-09-20 15:24:24,001 [HibernateUtil.java:46] - HibernateUtil.static - end
休眠配置
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.url">jdbc:db2://192.168.1.6:51201/MYDB</property>
<property name="hibernate.connection.username">myuser</property>
<property name="hibernate.connection.password">MyPassword</property>
<property name="hibernate.connection.driver_class">com.ibm.db2.jcc.DB2Driver</property>
<property name="hibernate.dialect">org.hibernate.dialect.DB2Dialect</property>
<property name="hibernate.query.factory_class">org.hibernate.hql.classic.ClassicQueryTranslatorFactory</property>
<property name="hibernate.jdbc.batch_size">100</property>
<property name="hibernate.show_sql">false</property>
<property name="hibernate.connection.release_mode">auto</property>
<property name="current_session_context_class">thread</property>
<property name="hibernate.connection.autocommit">true</property>
<property name="hibernate.transaction.flush_before_completion">true</property>
<property name="hibernate.transaction.auto_close_session">false</property>
<property name="hibernate.cglib.use_reflection_optimizer">true</property>
...
</session-factory>
</hibernate-configuration>
jdbc:db2://192.168.1.6:51201/MYDB
我的用户
我的密码
com.ibm.db2.jcc.DB2Driver
org.hibernate.dial.DB2Dialect
org.hibernate.hql.classic.ClassicQueryTranslatorFactory
100
假的
汽车
线
真的
真的
假的
真的
...
哪个类生成警告?我的猜测是,您没有捕获异常,因为它没有被抛出。如果是这样的话,也许您可以测试连接是否是在代码中建立的,然后自己抛出异常。我认为您需要的是测试连接获取
似乎您正在使用默认的Hibernate连接池。不幸的是,hibernate连接池不支持他的属性,他们建议使用第三方连接池库,如C3P0
Hibernate不鼓励使用默认连接
然而,Hibernate自己的连接池算法非常复杂
初级的它旨在帮助您开始,而不是
用于生产系统,甚至用于性能
测试。您应该使用第三方池以获得最佳性能和
稳定
您可以使用hibernate配置C3P0。C3P0的测试连接。很抱歉我的错误。那个班实际上是HibernateUtil。我已经更新了我的JAVA代码。我已经在代码的调试模式下跟踪了每一条语句,但它执行得非常完美。
@Santosh
Hibernate配置已经添加。