В транзакции, использующей spring-data-redis, один из кодов сгенерирует не проверяющее исключение, почему это исключение в конечном итоге будет выдано? - PullRequest
0 голосов
/ 15 декабря 2018
<!-- language: lang-java -->

    Object result = stringRedisTemplate.execute(new SessionCallback<Session>() {
      public Session execute(RedisOperations redisOperations) throws DataAccessException { 
            try{
               redisOperations.watch(xxx);
               redisOperations.multi();
               int i = 1/0; //Test redis transaction rollback
               //...
               List<Object> execResult = redisOperations.exec();
            }finally{
                redisOperations.unwatch();
                return null
            }             
    }

В середине блоков кода multi и exec, намеренно добавляя строку (int i = 1/0), будет выдан код исключения для проверки отката транзакции SDR, и обнаружится, что исключение (redis.clients.jedis.exceptions.JedisDataException: Cannot use Jedis when in Multi. Please use Transation or reset jedis state.

Почему выбрасывается это исключение?

...