我正在构建一个反向代理服务器,它将授权并向某些内部API传递http请求。保持Hibernate会话始终打开
我根据Postgres
DB中的条目授权传入请求。
该项目的性能优先 - 反向代理服务器不应该增加很多响应时间。
的一点是:
我使用Hibernate
来查询数据库。 DB is read-only.
我初始化期间开扩的Hibernate session在Spring配置:
@Bean
public Session session()
{
LOG.info("Opening Hibernate session...");
try
{
return HibernateUtil.getSessionFactory().openSession();
}
catch (final HibernateException ex)
{
LOG.error("HibernateException while opening Hibernate session.", ex);
throw ex;
}
}
我再注入到会话DAO层,我用它在读取方法:
@Repository
public class MappingDAOHibernate implements IMappingDAO
{
@Autowired //in fact this is autowired using constructor
private final Session session;
.....
//read method
@Override
public MappingDto getMapping() throws SQLException
{
this.session.beginTransaction();
return (MappingDto)this.session.createCriteria(MappingDto.class)
}
正如你所看到的 - 我不是关于每个DAO呼叫的闭幕/开幕式。我只是在App init中打开它,并且一直保持打开状态。 的原因是:
1.这是最快的,最简单的实现
2.我想避免与开幕式表演的开销/关闭会话
问:
1.是否可以接受让Hibernate的Session一直开放吗?特别是如果DB是只读的?
每个额外的会话都会消耗一些内存,只读使得它可以安全使用,但是它极其耗费内存,并且通常是一种不好的做法。 – cristianhh