java SpringHibernate在webapp中使用,线程安全会话管理的策略是什么
我正在用Spring和Hibernate开发一个web应用程序,我痴迷于使应用程序线程安全并能够支持重载,因此根据我老板的建议,我最终编写了自己的session
和session container
来实现session per request pattern
。加上我有很多{
正在运行quartz以获取数据库中的某些更新
虽然我想把一切都调整得更好,但我没有时间做必要的研究,加上Hibernate是一种巨大的学习
就这样,我想借用你们的经验,问几个问题,知道该走什么方向
问题1:Hibernate生成的uuid对于线程环境和避免StaleObjectException足够安全吗
问题2在threadSafe场景中使用hibernate getCurrentSession的最佳策略是什么(我已经阅读了threadlocal的内容,但没有得到太多的理解,所以没有这么做)
问题3:HIbernateTemplate是否可以作为最简单的解决方案
问题4:如果要实现生产服务器的连接池和调优要求,您将选择什么
请毫不犹豫地向我指出博客或在线资源,我所需要的只是一种适合我的场景的方法。如果你要这样做,你的方法
谢谢你读到这篇文章,欢迎大家的意见
# 1 楼答案
您应该删除所有这些代码,改用Spring/HibernateAPI:更少的bug,更少的维护
您可以使用
GenericDao
并使用Spring注入所需的内容为了严格回答您的问题,以下是参考指南中有关uuid生成器的内容:
所以我认为这是安全的。但是我认为你的StaleObjectException
是不相关的(这是另一个问题)最好的策略是使用它,
sessionFactory.getCurrentSession()
将始终为当前数据库事务提供一个Session
作用域,也称为“上下文会话”。再次引用参考文件:现在没有必要实现自己的基于^{} 的解决方案,不要这样做
嗯,
HibernateTemplate
并没有被弃用,但它不再被推荐,我更喜欢实现template-less DAOs:其中
SessionFactory
由Spring注入。我建议阅读So should you still use Spring's HibernateTemplate and/or JpaTemplate??以获得完整的背景资料,以及Spring文档中关于ORM数据访问的整个部分嗯。。。什么我永远不会实现我的连接池,而是使用来自应用服务器的连接池。也许你应该澄清这个问题
更新:在生产环境中,我不会使用Hibernate内置的连接池,而是将Hibernate配置为使用应用服务器提供的JNDI数据源(以及应用服务器连接池)。从文件中: