0

我有一个 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;
}
4

2 回答 2

1

为了在池化数据库连接方面获得更好的性能,有像c3p0这样的开源实现,它可以很好地与 spring 和 hibernate 配合使用。这对于批处理尤其重要。

您使用的是休眠实现SessionFactory吗?如果是这种情况,那么它确实是线程安全的,所以你应该很好。

另一个建议是查看可能对您的情况有用的春季批次。

更新:你已经说过你正在使用 Hibernate,所以SessionFactory应该很好。

于 2012-10-29T08:54:38.980 回答
1

我认为你的问题比线程安全要大一点,你需要唤起事务管理。会话工厂生成的会话是线程本地的(spring 的 HibernateTransactionManager 和创建 sessuinFactory 的 beanFactory - 例如:AnnotationSessionFactoryBean- 管理所有这些东西)

所以你的代码是安全的;)

于 2012-10-29T11:19:43.967 回答