如何在Hibernate

时间:2015-05-25 14:20:42

标签: java database hibernate connection-pooling firebird

我有一个Web应用程序,目前使用C3P0和Hibernate连接到Firebird 1.5数据库。

我不时遇到问题,数据库只是停止响应,即使尝试手动重启服务也没有任何效果,并且它不会生成任何日志,所以我必须手动重新启动机器让它再次运作。

我认为当池试图获取特定数量的连接或类似的东西时,firebird可能会挂起。所以我需要测试我的应用程序没有连接池,以检查这是否是问题。

我不能简单地从持久性中删除C3P0配置,因为这样hibernate会使用它自己的集成连接池。那怎么办呢?

2 个答案:

答案 0 :(得分:0)

最灵活的解决方案是使用an explicit DataSource,而不是通过Hibernate配置连接池。配置非合并DataSource的一个选项是使用DriverManagerDataSource

@Override
protected Properties getProperties() {
    Properties properties = new Properties();
    properties.put("hibernate.dialect", "org.hibernate.dialect.HSQLDialect");
    //log settings
    properties.put("hibernate.hbm2ddl.auto", "update");
    //data source settings
    properties.put("hibernate.connection.datasource", newDataSource());
    return properties;
}

protected ProxyDataSource newDataSource() {
    DriverManagerDataSource actualDataSource = new DriverManagerDataSource();
    actualDataSource.setUrl("jdbc:hsqldb:mem:test");
    actualDataSource.setUsername("sa");
    actualDataSource.setPassword("");
    ProxyDataSource proxyDataSource = new ProxyDataSource();
    proxyDataSource.setDataSource(actualDataSource);
    proxyDataSource.setListener(new SLF4JQueryLoggingListener());
    return proxyDataSource;
}

通过这种方式,您可以选择合并或非合并DataSource

为了更好地了解您的连接池资源使用情况,您可以配置FlexyPool来收集以下指标:

  • 并发连接
  • 并发连接请求
  • 数据源连接获取时间
  • 连接租约时间
  • 最大泳池大小
  • 总连接获取时间
  • 溢出池大小
  • 重试尝试次数

答案 1 :(得分:0)

我找到了hibernate 3.34.3的文档,其中包含:

  

只需用hibernate.connection.pool_size属性替换即可   连接池特定设置。这将关闭Hibernate的功能   内部游泳池。

     

Hibernate将使用其org.hibernate.connection.C3P0ConnectionProvider   如果设置了hibernate.c3p0。* properties

,则用于连接池

所以从配置中删除 hibernate.connection.pool_size 和任何 hibernate.c3p0 ... 属性,而不是禁用连接池。