当我们使用 c3p0 连接池时,会话应该在休眠中关闭吗?
sessions should be closed in hibernate when we use c3p0 connection pooling?
我想知道当我在hibernate 中使用c3p0 连接池时是否应该使用session.close()
?或者 c3p0 在一定时间间隔后自动关闭?我是否需要在
之前打开会话
SessionFactory factory = HibernateUtil.getSessionFactory();
Session session=factory.openSession();
因为在接下来的教程中它不会关闭会话。
正确的方法是什么?
编辑:
这就是我的代码
@SuppressWarnings("unchecked")
@Override
public JSONObject getUserDetails(int id) {
long lStartTime = new Date().getTime();
JSONObject obj = new JSONObject();
try(Session session=factory.openSession()) {
Employee emp=(Employee)session.load(Employee.class,id);
if(emp != null) {
obj.put("id", emp.getId());
obj.put("name", emp.getName());
}
long lEndTime = new Date().getTime();
log.info("[ Personal Details ]Time elapsed For Fetching :"+(lEndTime - lStartTime));
} catch (Exception e) {
// TODO: handle exception
}
}
我建议您尽快 close
您的资源,这样连接将返回到池 更快 。您还可以使用 try-with-resources
Statement 来确保发生这种情况。
SessionFactory factory = HibernateUtil.getSessionFactory();
try (Session session = factory.openSession()) {
// ...
}
正如 ELLIOT 所说,最好手动关闭会话而不依赖任何东西,或者如果您使用的是 java 7 或更高版本,则可以使用上面指定的 try 块。
是的,使用 try-with-resources 是更好的选择。
但这里有一些关于它的假设:
- try-with-resources 语句抛出的任何异常都是
压制。
- 你可以使用 catch,finally 像正常一样阻塞
试着抓。
- 您可以在 try-with-resources 中声明以分号分隔的多个资源,例如
try (
java.util.zip.ZipFile zf =
new java.util.zip.ZipFile(zipFileName);
java.io.BufferedWriter writer =
java.nio.file.Files.newBufferedWriter(outputFilePath, charset)
)
- 它首先在 try 块结束后关闭资源,即是否有任何异常来自 try 块。之后执行catch,finally block。
- 在 try-with-resource 语句中声明的资源必须实现 AutoCloseable 或 Closeable 接口。
我想知道当我在hibernate 中使用c3p0 连接池时是否应该使用session.close()
?或者 c3p0 在一定时间间隔后自动关闭?我是否需要在
SessionFactory factory = HibernateUtil.getSessionFactory();
Session session=factory.openSession();
因为在接下来的教程中它不会关闭会话。
正确的方法是什么?
编辑:
这就是我的代码
@SuppressWarnings("unchecked")
@Override
public JSONObject getUserDetails(int id) {
long lStartTime = new Date().getTime();
JSONObject obj = new JSONObject();
try(Session session=factory.openSession()) {
Employee emp=(Employee)session.load(Employee.class,id);
if(emp != null) {
obj.put("id", emp.getId());
obj.put("name", emp.getName());
}
long lEndTime = new Date().getTime();
log.info("[ Personal Details ]Time elapsed For Fetching :"+(lEndTime - lStartTime));
} catch (Exception e) {
// TODO: handle exception
}
}
我建议您尽快 close
您的资源,这样连接将返回到池 更快 。您还可以使用 try-with-resources
Statement 来确保发生这种情况。
SessionFactory factory = HibernateUtil.getSessionFactory();
try (Session session = factory.openSession()) {
// ...
}
正如 ELLIOT 所说,最好手动关闭会话而不依赖任何东西,或者如果您使用的是 java 7 或更高版本,则可以使用上面指定的 try 块。
是的,使用 try-with-resources 是更好的选择。
但这里有一些关于它的假设:
- try-with-resources 语句抛出的任何异常都是 压制。
- 你可以使用 catch,finally 像正常一样阻塞 试着抓。
- 您可以在 try-with-resources 中声明以分号分隔的多个资源,例如
try ( java.util.zip.ZipFile zf = new java.util.zip.ZipFile(zipFileName); java.io.BufferedWriter writer = java.nio.file.Files.newBufferedWriter(outputFilePath, charset) )
- 它首先在 try 块结束后关闭资源,即是否有任何异常来自 try 块。之后执行catch,finally block。
- 在 try-with-resource 语句中声明的资源必须实现 AutoCloseable 或 Closeable 接口。