Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.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 我想在一个功能中管理多个事务_Java_Spring_Spring Boot - Fatal编程技术网

Java 我想在一个功能中管理多个事务

Java 我想在一个功能中管理多个事务,java,spring,spring-boot,Java,Spring,Spring Boot,我正在寻找一种使用Spring Boot管理多个事务的机制。 代码如下: class Controller { @Autowired Service service; class Service { @ Transactional public void execute () { // 1. select process using Repository // 2. Update process using Repository

我正在寻找一种使用Spring Boot管理多个事务的机制。 代码如下:

class Controller {
    @Autowired
    Service service;

class Service {
    @ Transactional
    public void execute () {
        // 1. select process using Repository
        // 2. Update process using Repository
        // 3. select process using Repository
如果在步骤3中发生异常,则需要在步骤2中回滚更新。 到目前为止,我一直在处理一个数据库,所以它的工作与上述问题。 但是,不同的数据库用于选择和更新。(数据源不同) 对于每个数据源,您都可以通过拆分来处理函数,但在这种情况下,对现有逻辑的修改将非常大。 如上所述,有一种方法可以让Spring管理事务,同时使用execute执行所有处理

目前正在调查是否可以通过以下方法实现,但如果有更智能的方法,请告诉我。 1.使用您自己的批注(@Transactional2)打开多个连接 2.拦截器检测到存储库的save*功能已经执行,并切换数据源


谢谢

在提供的示例中,您需要回滚的唯一事务是链接到update语句的事务。在这种情况下,将
execute
方法标记为
@transactional
就足够了,确保指定事务链接到您正在更新的
数据源

class Service {

    @ Transactional("updating-datasource")
    public void execute () {
        // 1. select process using Repository
        // 2. Update process using Repository
        // 3. select process using Repository
由于选择而发生的任何异常都会将此事务标记为“仅回滚”,更新将回滚