众所周知,Spring 事务与线程相关联:存在特定于正在进行的事务的线程局部变量。事务对协程上下文一无所知。那么如果我想从协程内部调用 @Transactional 方法怎么办:它安全吗?
想象一下,我们在 JobProcessor bean 中有一个处理作业列表的方法。每个作业都在 async{} 内处理。我想在每次成功或失败处理后使用 bean JobService 的 @Transactional 方法更新数据库。
class JobProcessor {
fun process(jobs: List<MyJob>) =
jobs.map { job ->
async {
try {
....//processing
jobService.success(job)
} catch (t: Throwable) {
jobService.failure(job)
}
}
}
class JobService {
@Transactional
fun success(job: MyJob) {...}
@Transactional
fun failure(job: MyJob) {...}
}
Run Code Online (Sandbox Code Playgroud)