【问题标题】:spring transaction management for multiple stored procedure call多个存储过程调用的spring事务管理
【发布时间】:2014-04-18 02:17:41
【问题描述】:

我正在使用 Spring Framework 进行数据库调用。 我有一个涉及调用 2 个存储过程的更新,每个都执行多个操作。

我在每个 SP 中分别定义了事务管理,如下所示:

 DECLARE EXIT HANDLER FOR SQLEXCEPTION 
 BEGIN
    ROLLBACK;
 END;

START TRANSACTION;

     .......logic .........
    COMMIT;

如果我单独调用每个 SP,这可以正常工作,但我想在一个事务中进行整个操作,因此如果对第一个 SP 的调用有效,但对第二个 SP 的调用失败,它会回滚两者。

所以显然我需要从 sps 中删除提交并在 Spring 端处理它。

目前对于 Spring,我正在使用 SimpleJDBCCall(下面的代码摘录)

public List executeSP(String spName, Map<String,Object> params, RowMapper mapper) throws Exception {

try {
    SimpleJdbcCall template = new SimpleJdbcCall(getDataSource()).withProcedureName(spName);
MapSqlParameterSource in = new MapSqlParameterSource();
for (String key : params.keySet()) {
        in.addValue(key, params.get(key));
}

template.returningResultSet("items", mapper);
Map<String, Object> out = template.execute(in);
return (List) out.get("items");
}
catch (Exception e) { 
logger.error("DataManager executeSP with Mapper (" + spName + ") with params = " + params +  e.getMessage() );
            throw e;
} catch (......... )

我的问题是,如果第二个存储过程失败,我如何调用第二个存储过程并回滚它们?

谢谢

【问题讨论】:

    标签: spring stored-procedures transactions


    【解决方案1】:
    @Transactional(rollbackFor=Exception.class)
    public void performBothSProcsTransactionally(){
       //executeSP1
    
       //executeSP2
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-11
      • 2013-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多