ill*_*nce 13 java performance orm hibernate transactions
只是想知道在Hibernate中开始一个新事务是否实际上分配了一个到DB的连接?
我关心b/c我们的服务器为每个收到的请求开始一个新的事务,即使该请求没有与DB交互.我们看到数据库连接是一个主要的瓶颈,所以我想知道是否应该花时间缩小我的交易范围.
到处搜索,但未能找到一个好的答案.非常简单的代码在这里:
SessionFactory sessionFactory = (SessionFactory) Context.getContext().getBean("sessionFactory");
sessionFactory.getCurrentSession().beginTransaction();
sessionFactory.getCurrentSession().setFlushMode(FlushMode.AUTO);
Run Code Online (Sandbox Code Playgroud)
非常感谢!一个
Pas*_*ent 16
A
SessionFactory是一个昂贵的创建线程安全对象,旨在由所有应用程序线程共享.它通常在应用程序启动时从Configuration实例创建一次.A
Session是一种廉价的,非线程安全的对象,应该使用一次,然后丢弃用于:单个请求,对话或单个工作单元.除非需要,否则ASession不会获得JDBCConnection或aDatasource.在使用之前它不会消耗任何资源.为了减少数据库中的锁争用,数据库事务必须尽可能短.长数据库事务将阻止您的应用程序扩展到高度并发的负载.建议您在用户思考期间保持数据库事务处于打开状态,直到工作单元完成.
现在,回答你的问题:
Session确实没有立即获得连接(连接是延迟加载)beginTransaction()会导致给定的连接负载Session connection查看org.hibernate.impl.SessionImpl#beginTransaction()并查看代码以获取更多详细信息.
| 归档时间: |
|
| 查看次数: |
9030 次 |
| 最近记录: |