Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.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
Spring@Transactional timeout未超时_Spring_Spring Transactions - Fatal编程技术网

Spring@Transactional timeout未超时

Spring@Transactional timeout未超时,spring,spring-transactions,Spring,Spring Transactions,我已将应用程序中的事务超时设置为@Transactional(传播=传播。必需,超时=30) ActiveMQXAConnectionFactory和Oracle XA数据源是我的分布式事务的两个资源。从队列中读取消息后,我的事务开始,处理应用程序的时间超过30秒,但事务仍未超时。只有在提交事务时,才会引发超时异常。我希望在30秒后事务立即超时并抛出异常,并使该线程可以使用队列中的另一条消息。这可能吗?如果没有看到您的配置,很难说。如果您只是添加一个@事务性的,它不会做任何事情。您需要一个Ent

我已将应用程序中的事务超时设置为@Transactional(传播=传播。必需,超时=30)


ActiveMQXAConnectionFactory和Oracle XA数据源是我的分布式事务的两个资源。从队列中读取消息后,我的事务开始,处理应用程序的时间超过30秒,但事务仍未超时。只有在提交事务时,才会引发超时异常。我希望在30秒后事务立即超时并抛出异常,并使该线程可以使用队列中的另一条消息。这可能吗?

如果没有看到您的配置,很难说。如果您只是添加一个
@事务性的
,它不会做任何事情。您需要一个
EntityManager
和一个
TransactionManager
,然后需要启用基于注释的事务管理,如果我没有记错的话,Spring需要控制您的数据源

另一个可能是不必要的补充说明,@Transactional只对公共方法有效。Spring将代理您的方法以管理事务,Spring只能代理公共方法。而且,它只能处理从另一个类到该方法的调用,如果您从同一个类中的另一个方法调用该方法,Spring也不能代理,因此没有事务管理。春天在这里是鬼鬼祟祟的

@Service
public class A{
  @Autowired
  Datasource datasource;

  @Transactional
  public void save(){
     datasource.doStuff();
  }

  public void callSave(){
     save();
  }
}

@Service
public class B{
  @Autowired
  A a;
  public void callSave(){
    a.save();
  }
}
这里,如果从
a.callSave()
调用
a.save()
,则不会发生代理,因此您将没有事务管理。但是在完全相同的应用程序中,如果您调用
b.callSave()
,您将拥有事务管理,因为Spring可以将方法调用代理到
a.save()

你用的是弹簧靴还是香草弹簧?如果你泄露出去,我们可能会给你更多的指导


希望这有点帮助

如果看不到您的配置,就很难说了。如果您只是添加一个
@事务性的
,它不会做任何事情。您需要一个
EntityManager
和一个
TransactionManager
,然后需要启用基于注释的事务管理,如果我没有记错的话,Spring需要控制您的数据源

另一个可能是不必要的补充说明,@Transactional只对公共方法有效。Spring将代理您的方法以管理事务,Spring只能代理公共方法。而且,它只能处理从另一个类到该方法的调用,如果您从同一个类中的另一个方法调用该方法,Spring也不能代理,因此没有事务管理。春天在这里是鬼鬼祟祟的

@Service
public class A{
  @Autowired
  Datasource datasource;

  @Transactional
  public void save(){
     datasource.doStuff();
  }

  public void callSave(){
     save();
  }
}

@Service
public class B{
  @Autowired
  A a;
  public void callSave(){
    a.save();
  }
}
这里,如果从
a.callSave()
调用
a.save()
,则不会发生代理,因此您将没有事务管理。但是在完全相同的应用程序中,如果您调用
b.callSave()
,您将拥有事务管理,因为Spring可以将方法调用代理到
a.save()

你用的是弹簧靴还是香草弹簧?如果你泄露出去,我们可能会给你更多的指导

希望这有点帮助