java.lang.ClassCastException: com.sun.proxy. $ Proxy219 не может быть приведен к org.springframework.data.redis.connection.StringRedisConnection - PullRequest
0 голосов
/ 04 июня 2018

Это функция для redis, pipe.Раньше раньше, но сегодня, когда я тестирую эту функциюЭто не работает.

public List<Object> hgetpipeline(List<String> keys) {
        List<Object> results = redisTemplate.executePipelined(
                new RedisCallback<Object>() {
                    @Override
                    public Object doInRedis(RedisConnection connection) throws DataAccessException {
                        StringRedisConnection stringRedisConn = (StringRedisConnection)connection;
                        for(int i=0; i< keys.size(); i++) {
                            stringRedisConn.hGetAll(keys.get(i)+"");
                        }
                        return null;
                    }
                });
      return results;
    }

В этой строке происходит ошибка

StringRedisConnection stringRedisConn = (StringRedisConnection)connection;

Есть информация об ошибке

java.lang.ClassCastException: 
com.sun.proxy.$Proxy219 cannot be cast to org.springframework.data.redis.connection.StringRedisConnection

анонация в основном классе

@SpringBootApplication
@EnableAsync
@EnableAspectJAutoProxy(proxyTargetClass = true, exposeProxy = true)
@EnableScheduling
@RestController
public class ApiApplication {

    public static void main(String[] args) {
        SpringApplication.run(ApiApplication.class, args);
    }

    @RequestMapping("/")
    public String index() {
        return "Server started!";
    }

}

Ответы [ 2 ]

0 голосов
/ 07 декабря 2018

Я думаю, что просто используйте соединение вместо redisTemplate в методе doInRedis.

public List<Object> hgetpipeline(List<String> keys) {
    int i = 0;
    List<Object> results = redisTemplate.executePipelined(
            new RedisCallback<Object>() {
                @Override
                public Object doInRedis(RedisConnection connection) throws DataAccessException {
                    return connection.hGetAll(keys.get(i++).getBytes());
                }
            });
  return results;
}
0 голосов
/ 05 июля 2018

попробуй

public List<Object> hgetpipeline(List<String> keys) {
        List<Object> results = redisTemplate.executePipelined(
                new RedisCallback<Object>() {
                    @Override
                    public Object doInRedis(RedisConnection connection) throws DataAccessException {

                        for(int i=0; i< keys.size(); i++) {
                            redisTemplate.hGetAll(keys.get(i)+"");
                        }
                        return null;
                    }
                });
      return results;
    }
...