【问题标题】:Thread safety hibernate DAO layer线程安全休眠 DAO 层
【发布时间】:2012-10-29 08:42:18
【问题描述】:

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

【问题讨论】:

    标签: spring hibernate thread-safety batch-processing


    【解决方案1】:

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

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

    另一个建议是查看spring batch,这可能对您的情况有用。

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2013-12-07
        • 2015-04-11
        • 1970-01-01
        • 2011-05-01
        • 2012-05-29
        • 2011-01-01
        • 2023-03-16
        • 1970-01-01
        • 2012-01-22
        相关资源
        最近更新 更多