Проблема с Redis Рассмотрите возможность определения bean-компонента типа org.springframework.data.redis.core.HashOperations в вашей конфигурации

Я пытаюсь подключиться к Redis через java, у меня следующая конфигурация:

@SpringBootApplication
@Configuration
@ComponentScan(basePackages = "com.infy.redisDemo")
public class RedisDemoApplication {

    @Bean
    public LettuceConnectionFactory getConnectionFactory(){
        LettuceConnectionFactory lettuceConnectionFactory = new LettuceConnectionFactory("localhost",6379);
        return lettuceConnectionFactory;
    }

    @Bean
    public RedisTemplate<String,Object> getRedisTemplate(){
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate();
        redisTemplate.setConnectionFactory(getConnectionFactory());
        return redisTemplate;
    }

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

}

Мои классы репо:

@Repository
public class UserRepoImpl implements UserRepository {

    private RedisTemplate<String, Object> redisTemplate;
    private HashOperations hashOperations;

    public final String key = "USER";

    public UserRepoImpl(RedisTemplate redisTemplate,
      HashOperations hashOperations) {
        this.redisTemplate = redisTemplate;
        this.hashOperations = redisTemplate.opsForHash();
    }

    @Override
    public void save(User user) {
        hashOperations.put(key,user.getId(),user);
    }

    @Override
    public void update(User user) {
        hashOperations.put(key,user.getId(),user);
    }

    @Override
    public Map findAll() {
        return hashOperations.entries(key);
    }
}

public interface UserRepository {
    void save(User user);
    void update(User user);
    Map findAll();
}

Мой класс контроллера, как показано ниже,

@RestController
@RequestMapping("/rest/user")
public class RedisController {
    private UserRepository userRepository;

    public RedisController(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    @GetMapping("/add/{id}/{name}")
    public User add(@PathVariable String id,@PathVariable String name){
        userRepository.save(new User(name,id,25000));
        return userRepository.findById(id);
    }
}

Когда я запускаю приложение, я получаю следующую ошибку,

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'redisController' defined in file [redisDemo\RedisController.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'userRepoImpl' defined in file [redisDemo\repository\UserRepoImpl.class]: Unsatisfied dependency expressed through constructor parameter 1; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.springframework.data.redis.core.HashOperations' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}

что не так в программе? любое предложение, чтобы заставить его работать? мне нужно использовать jedisconnectionFactory? Я использую Intellij и мою версию для редис 3.2 в Windows и весна 2.1.6.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
2 793
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

вам не нужно передавать HashOperations hashOperations в качестве параметра в конструкторе UserRepoImpl. Вместо этого вы можете удалить этот аргумент из конструктора.

public UserRepoImpl(RedisTemplate redisTemplate) {
    this.redisTemplate = redisTemplate;
    this.hashOperations = redisTemplate.opsForHash();
}

Другие вопросы по теме