0

Transaction オブジェクトのリストがあります。

List<Transaction> transactions;

トランザクションを同時に更新するスレッドのプールを作成して、これらのトランザクションをバッチ処理する必要があります。これらのスレッドは、同じ DAO クラス ( Springシングルトン Bean) を使用してこれらのトランザクションを更新し、トランザクションを更新します。HibernateORMとして使用しています

コードがスレッド セーフであることを確認するには、何を考慮すればよいですか? 私は少し混乱しています。

これがDAOクラスです。SessionFactoryまた、DAO クラスにオートワイヤーされる Spring Bean としても定義されます。

@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

あなたの問題はスレッドセーフよりも少し大きいと思います。トランザクション管理を呼び出す必要があります。セッションファクトリによって生成されたセッションはスレッドローカルです (Spring の HibernateTransactionManager と sessuinFactory を作成する beanFactory - 例: AnnotationSessionFactoryBean - これらすべてのものを管理します)

だからあなたのコードは安全です;)

于 2012-10-29T11:19:43.967 に答える
1

DB 接続をプールする際のパフォーマンスを大幅に向上させるために、 Springや Hibernate とうまく連携するc3p0などのオープン ソース実装があります。これは、バッチ処理では特に重要です。

の休止状態の実装を使用していますSessionFactoryか? その場合は、実際にスレッドセーフであるため、良いはずです。

別の提案は、あなたの状況に役立つかもしれない春のバッチを見ることです。

更新: Hibernate を使用していると既に述べたので、これで問題ありSessionFactoryません。

于 2012-10-29T08:54:38.980 に答える