我怎样才能让斯波克和@transactional一起运行呢?

rjee0c15  于 2021-07-13  发布在  Java
关注(0)|答案(0)|浏览(237)

下面是我在测试中尝试实现的一个简化版本

@ContextConfiguration(classes = [MockConfig])
@SpringBootTest(classes = [MyDbService.class])
class MyDbServiceSpec extends Specification {

    def "it gets an error if the row is already locked"() {
        when: "a row is locked, then the thread sleeps to simulate work"
        Thread.start {
            myDbService.lockRow(1)
            Thread.sleep(60000)
        }

        // try to lock the exact same row
        myDbService.lockRow(1)

        then: "it should thrown an exception"
        def ex = thrown(Exception)
    }

    // MockConfig here
}

背后的疑问 myDbService.lockRow() 只是一个 SELECT .. FOR UPDATE NOWAIT 看起来斯波克在一次通话中同时处理了这两个电话 @Transactional ,所以第二次呼叫不会失败。
我怎么才能接到你的第一个电话 lockRow 在单独的事务中运行,那么第二个事务会出错吗?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题