You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

@EnableRedisRepositories失效,报Failed to read candidate component class错误

Spring Redis Repository集成报错解决方案

问题现象

在Spring Web应用中尝试通过Spring Repository使用Redis,添加@EnableRedisRepositories注解后抛出如下错误:

org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component class: file [/Users/nomansadiq/Documents/code-workspace/EHCS-master/target/classes/com/bison/ams/config/RedisConfig.class]; nested exception is java.lang.annotation.AnnotationFormatError: Invalid default: public abstract java.lang.Class org.springframework.data.redis.repository.configuration.EnableRedisRepositories.repositoryBaseClass()
    at org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.findCandidateComponents(ClassPathScanningCandidateComponentProvider.java:303)
    ...(省略部分错误栈)

相关代码

Redis配置类

@Configuration
@EnableTransactionManagement
@ComponentScan({"com.bison.ams.config", "com.bison.ams.persist"})
@EnableRedisRepositories
public class RedisConfig {

    @Autowired
    ConfigProperties configProp;

    @Bean
    JedisConnectionFactory jedisConnectionFactory() {
        JedisConnectionFactory jedisConFactory = new JedisConnectionFactory();
        String host = configProp.getConfigValue("redis.host");
        String port = configProp.getConfigValue("redis.port");
        jedisConFactory.setHostName(host);
        jedisConFactory.setPort(Integer.parseInt(port));
        return jedisConFactory;
    }

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

Repository接口

@Repository
public interface TagPositionRepo extends CrudRepository<TagPosition, String> {
}

实体类

@RedisHash("TagPosition")
public class TagPosition implements Serializable {

    private String id;
    private Position position;
...
}

pom.xml依赖

<properties>
        <java-version>1.8</java-version>
        <org.aspectj-version>1.6.10</org.aspectj-version>
        <jackson.version>1.9.13</jackson.version>
        <hibernate.validator.version>4.2.0.Final</hibernate.validator.version>
        <org.springframework-version>4.2.1.RELEASE</org.springframework-version>
        <!--        <org.springframework-version>4.2.5.RELEASE</org.springframework-version>-->

        <org.slf4j-version>1.6.6</org.slf4j-version>
        <springfox-version>2.2.2</springfox-version>
    </properties>

    <dependencies>
        ...(省略其他依赖)
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-redis</artifactId>
            <version>1.8.23.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>2.9.0</version>
            <type>jar</type>
        </dependency>
    </dependencies>

问题原因

Spring版本与Spring Data Redis版本不兼容:

  • Spring Data Redis 1.8.x系列要求Spring Framework版本至少为4.3.x,当前使用的Spring版本4.2.1.RELEASE过低。
  • @EnableRedisRepositories注解的repositoryBaseClass默认值依赖了Spring 4.3才引入的类,低版本Spring无法解析该注解的默认值,从而抛出AnnotationFormatError。

解决方案

方案1:升级Spring Framework版本

将Spring版本升级到4.3.x及以上(推荐与Spring Data Redis 1.8.23匹配的4.3.30.RELEASE),修改pom.xml中的org.springframework-version:

<org.springframework-version>4.3.30.RELEASE</org.springframework-version>

方案2:降级Spring Data Redis版本

将Spring Data Redis降级到适配Spring 4.2.x的1.7.x系列,比如1.7.23.RELEASE:

<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-redis</artifactId>
    <version>1.7.23.RELEASE</version>
</dependency>

额外优化建议

  1. 去掉redisTemplate()方法上的@Autowired注解:Spring会自动注入方法依赖的Bean,直接调用jedisConnectionFactory()即可,无需额外注入。
  2. 给@EnableRedisRepositories指定扫描包路径,减少不必要的类扫描:
@EnableRedisRepositories(basePackages = "com.bison.ams.persist")

内容的提问来源于stack exchange,提问作者user565

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 06:44:49