当前位置: 首页 > 知识库问答 >
问题:

Redis问题考虑在您的配置中定义一个类型为“org.springframework.data.redis.core.哈希操作”的bean

吴兴国
2023-03-14

我正在尝试通过java连接到Redis,我有以下配置,

@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.未满足的DependencyException:创建名称为redisController的bean时出错,定义在文件[redisDemo\RedisController.class]中:通过构造函数参数0表示的依赖项未满足;嵌套异常org.springframework.beans.factory.未满足的DependencyException:创建名称为userRepoImpl的bean时出错,定义在文件[redisDemo\repository\UserRepoImpl.class]中:通过构造函数参数1表示的依赖项未满足;嵌套异常org.springframework.beans.factory.NoSuchBean定义异常:没有可用的类型为org.springframework.data.redis.core.哈希操作的合格bean:预计至少有1个bean符合自动连接候选条件。依赖注释:{}

程序中有什么问题?有什么建议可以让它工作吗?我需要使用jedisConnectionFactory吗?我使用的是Intellij,我的redis版本在windows上是3.2,Spring是2.1.6。

共有1个答案

施鸿
2023-03-14

您不需要将HashOperations作为参数传递给构造函数UserRepoImpl。相反,您可以从构造函数中删除此参数。

public UserRepoImpl(RedisTemplate redisTemplate) {
    this.redisTemplate = redisTemplate;
    this.hashOperations = redisTemplate.opsForHash();
}
 类似资料: