9.7. 批处理
批处理允许原子性以及事务的一些特征,但不包括完整的 JTA 或 XA 功能。批处理通常比一整套交易更轻、更便宜。
提示
通常而言,每当交易中唯一参与者是数据网格集群时,均应使用批处理 API。另一方面,每当事务涉及多个系统时,都应使用 JTA 事务(涉及 TransactionManager
)。例如,考虑了交易的"Hello world!":将资金从一个银行帐户转移到另一个银行帐户。如果两个帐户都存储在 Data Grid 中,则可以使用批处理。如果一个帐户位于数据库中,另一个是 Data Grid,则需要分布式事务。
注意
您不必 定义事务管理器来使用批处理。
9.7.1. API
将缓存配置为使用批处理后,您可以通过调用 Cache
上的 startBatch ()
和 endBatch ()
来使用它。例如,
Cache cache = cacheManager.getCache(); // not using a batch cache.put("key", "value"); // will replicate immediately // using a batch cache.startBatch(); cache.put("k1", "value"); cache.put("k2", "value"); cache.put("k2", "value"); cache.endBatch(true); // This will now replicate the modifications since the batch was started. // a new batch cache.startBatch(); cache.put("k1", "value"); cache.put("k2", "value"); cache.put("k3", "value"); cache.endBatch(false); // This will "discard" changes made in the batch
9.7.2. 批处理和 JTA
在后台后,批处理功能启动 JTA 事务,并且该范围内的所有调用都与其关联。为此,它使用非常简单(如没有恢复)内部 TransactionManager
实现。使用批处理时,您将获得:
- 在批处理完成前,您要在调用期间获取锁定
- 更改都会在批处理过程中在批处理中复制。减少批处理中每个更新的复制聊天。
- 如果使用同步复制或无效,则复制/无效会导致批处理回滚。
- 所有事务相关的配置也适用于批处理。