V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
mikulch
V2EX  ›  问与答

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

  •  
  •   mikulch · 2016-12-16 16:21:09 +08:00 · 1362 次点击
    这是一个创建于 2687 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我有一个业务需求,希望能够在被 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 的方法呢?

    2 条回复    2016-12-16 19:11:41 +08:00
    mikulch
        1
    mikulch  
    OP
       2016-12-16 16:33:10 +08:00
    gdsagdada
        2
    gdsagdada  
       2016-12-16 19:11:41 +08:00
    代码问题问 stackoverflow.com
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2708 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 15:50 · PVG 23:50 · LAX 08:50 · JFK 11:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.