【问题标题】:Entitymanager, too many connectionsEntitymanager,连接太多
【发布时间】:2013-05-09 04:42:13
【问题描述】:

我只为整个程序创建一个会话工厂,并在每次我想要持久化/更新/查询时创建。一个新的实体管理器,但我总是遇到很多连接错误。任何人都可以给我一个建议吗?在我看来,这不是增加 MySql 中允许的连接数的最佳解决方案。我使用 C3P0 进行池化。

【问题讨论】:

  • 你完成后是否在EntityManger 上运行close()?你的数据库服务器会不会被其他东西过载?
  • 在每次持久性和查询操作后,我在 EntityManager 对象上运行 close() 并且数据库服务器是本地的,但来自 mysql 的最大连接数是默认值。如果我将最大连接增加到 500 或 smth。否则我会在以后的执行中出错
  • 增加连接限制是一个糟糕的解决方案。我会确保 C3P0 不会尝试分配对数据库来说太大的连接池。否则,您可能会尝试发布一些数据库访问代码供 SO 查看。
  • 这里是主数据库代码Pastebin。几乎每个数据库操作都使用此代码的组合运行。
  • 您的代码不会始终在 EntityManagers 上运行 close()。在您的 try-catch 块中,如果抛出异常,em 永远不会关闭。 remove() 方法甚至没有尝试关闭 em。

标签: java mysql hibernate entitymanager hibernate-entitymanager


【解决方案1】:

在调用EntityManager 时尝试使用这样的try-catch-finally 模板。

EntityManager em = ... //However you get an em.
try {
    em.getTransaction().begin();

    // ...  Put your persistence code here.

    em.getTransaction().commit();
} catch (Exception ex) {
    em.getTransaction().rollback();
    throw ex;
} finally {
    em.close();
}

【讨论】:

    猜你喜欢
    • 2017-04-11
    • 2011-07-13
    • 2018-08-04
    • 2017-12-27
    • 2011-03-05
    • 2014-07-22
    • 2020-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多