java - 如何在 Hibernate 中禁用连接池

标签 java database hibernate connection-pooling firebird

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

我时不时遇到数据库就停止响应的问题,即使尝试手动重启服务也没有任何效果,也不会生成任何日志,所以我不得不手动重启机器让它再次工作。

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

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

最佳答案

最灵活的解决方案是使用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收集指标:

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

关于java - 如何在 Hibernate 中禁用连接池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30440477/

相关文章:

java - Spring 数据休息: Default Timestamp Fails and ID returns 0

java.lang.ClassCastException : java. util.HashMap 无法转换为 java.lang.Comparable

java - 为什么 int 变量值在 Integer.MIN_VALUE 处并递减时设置为 Integer.MAX_VALUE

c# - 已经有一个打开的 DataReader 与此连接关联,必须先将其关闭

android - 如何在 Android 设备上查看 SQLite 数据库?

java - 如何解决异常 org.hibernate.SessionException : Session was already closed

java - android无法接收从pc发送的所有数据

java - AutoCompleteTextView 和异步类

database - 如何在两个节点之间的 neo4j 中创建关系?

sql - 如何用Oracle触发器通知JBoss