有在我们的DAO层19层的方法,每一个是这一些变化:确保EntityManager连接关闭的正确方法是什么?
public TicketProp saveTicketProp(TicketProp prop) {
EntityManager em = this.emf.createEntityManager();
try {
em.getTransaction().begin();
prop = (TicketProp) em.merge(prop);
em.getTransaction().commit();
return prop;
} finally {
em.close();
}
}
含义:在每种方法处理我们自己的事务,并在finally块关闭它。我们正在测试Jersey应用程序,所以我们的JUnit测试扩展了JerseyTest。每个测试方法实例化一个灰熊容器,运行测试,然后关闭容器。 EntityManagerFactory在春季注入。我们在Hibernate上使用JPA。
我正在监视与我们的MySQL测试数据库的连接,并且它们总是很高。单独一个测试运行MySQL的“Max_used_connections”变量为38.为了好玩,我去了所有的em.close()调用,并且测试仍然使用38个连接。我使用Hibernate的内置连接池(我不知道prod的用法)。我仍然期待某种智能池。
我处理EntityManager错了吗?我还可以关闭连接吗?
em.close只释放到连接池的连接。 emf.close将关闭所有连接。所以在应用程序中创建的emf可能太多,因此连接太多。 – Scarlett 2012-02-16 11:41:11