【发布时间】:2020-02-07 14:12:29
【问题描述】:
我有办法
@Transactional
public void updateSharedStateByCommunity(List[]idList)
从以下 REST API 调用此方法:
@RequestMapping(method = RequestMethod.POST)
public ret_type updateUser(param) {
// call updateSharedStateByCommunity
}
现在ID列表非常大,比如200000,当我尝试处理它时,它需要很多时间并且在客户端发生超时错误。
所以,我想将其拆分为两个调用,每个调用的列表大小为 100000。
但是,问题是,它被视为 2 个独立的交易。
注意:2 次调用只是一个例子,如果 number id 更大,可以分成多次。
我需要确保对单个事务的两个单独调用。如果 2 个调用中的任何一个失败,则它应该回滚到所有操作。
另外,在客户端,我们需要显示进度对话框,所以我不能只使用超时。
【问题讨论】:
-
默认情况下
@Transactional方法继承当前事务,因此只需从标记为@Transactional的其他方法调用该方法。 注意:您必须手动flush和clear会话释放已处理对象的 RAM 内存 -
使用
@Transactional注释调用方法,并在您的方法上更改Propagation事务级别 - 如果需要。默认为REQUIRED- 支持当前事务,如果不存在则创建一个新事务。所以我相信你不必改变它。 -
我认为传播级别无济于事。拆分将在客户端完成。因此,当时不存在先前的横断。
-
客户是否期待它的任何回应?
-
只需通过处理小批量和刷新和清除来改进您在
updateSharedStateByCommunity中的实现。但是,由于您没有包含实际的实现,我们无法为您提供帮助。
标签: java spring-boot server