@Transactional 隔离级别似乎不起作用
@Transactional isolation level seems to be not working
我对@Transactional 有一些疑问,a.k.a spring-tx.
在这样的代码中。
@Transactional(propagation = Propagation.REQUIRES_NEW, isolation = Isolation.SERIALIZABLE)
public TestObject testTransaction(Long id, String name, String content) {
//This is find
TestObject testObject = testObjectRepository.findById(id).orElse(null);
if (testObject != null) {
System.out.println(testObject.getId() + "/"
+ testObject.getName() + "/"
+ testObject.getContent());
}
// update something
testObject.changeContent(name, content);
slowQuery();
//delay for late
return testObject;
}
如果我使用邮递员请求这样的东西。
第一个请求是 http://localhost:8080/spring/test/transaction?id=1&name=123&content=123
第二个请求是 http://localhost:8080/spring/test/transaction?id=1&name=456&content=456
然后我猜,第一个请求挂在事务上,然后第二个请求必须被 Spring-tx 拒绝,因为第一个请求事务的隔离级别是 SERIALIZABLE
,并且事务工作未完成.
但是两次请求的结果是
{
"name":"456",
"content":"456"
}
有人知道我使用 mysql 和 docker 以及 spring-data-jpa 的事务隔离吗?
如果您使用@Transactional 注释,那么为了确保在数据库中发生了提交,请使用另一个注释,因为@EnableTransactionManagement 还包括以下代码
connection.setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);
有关相同内容的更多详细信息,请遵循此 link
我对@Transactional 有一些疑问,a.k.a spring-tx.
在这样的代码中。
@Transactional(propagation = Propagation.REQUIRES_NEW, isolation = Isolation.SERIALIZABLE)
public TestObject testTransaction(Long id, String name, String content) {
//This is find
TestObject testObject = testObjectRepository.findById(id).orElse(null);
if (testObject != null) {
System.out.println(testObject.getId() + "/"
+ testObject.getName() + "/"
+ testObject.getContent());
}
// update something
testObject.changeContent(name, content);
slowQuery();
//delay for late
return testObject;
}
如果我使用邮递员请求这样的东西。
第一个请求是 http://localhost:8080/spring/test/transaction?id=1&name=123&content=123
第二个请求是 http://localhost:8080/spring/test/transaction?id=1&name=456&content=456
然后我猜,第一个请求挂在事务上,然后第二个请求必须被 Spring-tx 拒绝,因为第一个请求事务的隔离级别是 SERIALIZABLE
,并且事务工作未完成.
但是两次请求的结果是
{
"name":"456",
"content":"456"
}
有人知道我使用 mysql 和 docker 以及 spring-data-jpa 的事务隔离吗?
如果您使用@Transactional 注释,那么为了确保在数据库中发生了提交,请使用另一个注释,因为@EnableTransactionManagement 还包括以下代码
connection.setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);
有关相同内容的更多详细信息,请遵循此 link