Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果POST响应无法传递,如何回滚事务_Java_Spring_Spring Mvc_Transactions_Spring Transactions - Fatal编程技术网

Java 如果POST响应无法传递,如何回滚事务

Java 如果POST响应无法传递,如何回滚事务,java,spring,spring-mvc,transactions,spring-transactions,Java,Spring,Spring Mvc,Transactions,Spring Transactions,使用SpringMVC,假设我实现了一个控制器,该控制器处理POST请求,在事务中执行数据库操作,并在响应体中返回结果 以下是控制器和服务层: @RestController @RequiredArgsConstructor public class SomeController { private final SomeService someService; @PostMapping("/something") public SomeResult postSomething(S

使用SpringMVC,假设我实现了一个控制器,该控制器处理POST请求,在事务中执行数据库操作,并在响应体中返回结果

以下是控制器和服务层:

@RestController
@RequiredArgsConstructor
public class SomeController {

  private final SomeService someService;

  @PostMapping("/something")
  public SomeResult postSomething(Something something) {
    return someService.handle(something);
  }

}

@Service
@RequiredArgsConstructor
public class SomeService {

  private final SomeRepository someRepository;

  @Transactional
  public SomeResult handle(Something something){
    // changes to the database
  }

}
问题:

假设有人在服务呼叫后立即拔掉网线,那么交易将被提交

1) 如果响应无法传递,Spring会抛出异常吗

2) 如果无法传递响应,是否可以回滚事务

3) 如何确保客户端重试时数据库保持一致?(POST不是幂等的)


谢谢

我将尝试回答您的问题:

1) 也许。这取决于答案的大小和连接丢失的确切时刻

如果spring尝试向套接字OS写入响应时检测到TCP/IP连接已关闭,则会引发异常。TCP协议不包含检测这种情况的内部过程,所以操作系统使用诸如超时之类的启发式方法

所以我在这里只看到一个选择。Spring尝试将响应写入套接字,但响应太大,无法放入缓冲区。在这种情况下,写入操作将被阻止。然后在一段时间后,它将因超时而中断,并引发异常

我不能100%确定我的答案是否准确,所以你最好自己检查一下。 我建议您不要依赖这种机制,因为它取决于许多不同的因素,如缓冲区大小、超时和Spring实现

2) 对于Spring,答案将是


3) 这取决于你。没有普遍的答案。例如,可以将
Hibernate
配置为对对象使用版本控制。

谢谢!你能澄清一下第一个问题吗?如果在服务呼叫结束后但在响应完全发送回客户机之前拔出网线,Spring是否会引发异常?我扩展了我的答案。