我有一个Transaction对象列表。
List<Transaction> transactions;
我需要通过创建一个并发更新事务的线程池来批量处理这些事务。 这些线程使用相同的DAO类( Spring 单例bean)更新这些事务以更新事务。我使用 Hibernate 作为 ORM
为了确保我的代码是线程安全的,我应该考虑什么?我有点困惑。
这是DAO课程。 SessionFactory
也被定义为Spring bean,然后自动装配到DAO类。
@Autowired
SessionFactory sessionFactory;
@Override
public Transaction update(Transaction transaction) {
Session session = sessionFactory.openSession();
session.beginTransaction();
session.update(transaction);
session.getTransaction().commit();
return transaction;
}
答案 0 :(得分:1)
为了获得更好的性能,看看汇集数据库连接,有像c3p0这样的开源实现,它可以很好地与spring和hibernate一起使用。这对于批处理尤为重要。
您使用的是SessionFactory
的hibernate实现吗?如果是这种情况那么它确实是线程安全的,所以你应该是好的。
另一个建议是查看可能对您的情况有用的spring batch。
更新:你已经说过你正在使用Hibernate,所以SessionFactory
应该是好的。
答案 1 :(得分:1)
我认为你的问题比线程安全有点大,你需要唤起事务管理。 会话工厂生成的会话是threadlocal(spring的HibernateTransactionManager和创建sessuinFactory的beanFactory - 例如:AnnotationSessionFactoryBean-管理所有这些东西)
所以你的代码是安全的;)