下面是我在测试中尝试实现的一个简化版本
@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
在单独的事务中运行,那么第二个事务会出错吗?
暂无答案!
目前还没有任何答案,快来回答吧!