小编Yar*_*ykh的帖子

如何在协程中处理 Spring 事务?

众所周知,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)

spring transactions kotlin kotlinx.coroutines

5
推荐指数
1
解决办法
1539
查看次数

标签 统计

kotlin ×1

kotlinx.coroutines ×1

spring ×1

transactions ×1