使用 spring data redis,如何获取 WatchError 异常,从而保证事务失败时能重新执行事务?

2016-12-16 16:21:09 +08:00
 mikulch

我有一个业务需求,希望能够在被 watch 的关键字发生变化后,程序线程 sleep1 秒,然后重新执行事务,直到执行成功。(若中途发生了其他 exception ,则中断操作)

在 python 中可以通过 catch watchError 异常,从而能够实现重新执行事务的可能性。 但是在 java 中使用 spring data redis 时,事务是这样实现的:

//execute a transaction
List<Object> txResults = redisTemplate.execute(new SessionCallback<List<Object>>() {
  public List<Object> execute(RedisOperations operations) throws DataAccessException {
    operations.multi();
    operations.opsForSet().add("key", "value1");

    // This will contain the results of all ops in the transaction
    return operations.exec();
  }
});
System.out.println("Number of items added to set: " + txResults.get(0));

网上搜了蛮久,官方文档也查了 官方文档连接: http://docs.spring.io/spring-data/redis/docs/current/reference/html/#tx ,但是还是没找到方法。

到底在java中如何有办法获取到 WatchException 的方法呢?

1414 次点击
所在节点    问与答
2 条回复
mikulch
2016-12-16 16:33:10 +08:00
gdsagdada
2016-12-16 19:11:41 +08:00
代码问题问 stackoverflow.com

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/328122

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX