配置redisson时报空指针异常

查看报错信息,最后一个caused by: 代码:

@Configuration
public class RedissonConfig {
          
   

    @Autowired
    private ProvinceService provinceService;

    @Bean
    public RBloomFilter initBloomFilter() {
          
   
        Config config = new Config();

        //分布式集群
        //        config.useClusterServers()
        //            .setScanInterval(2000)
        //            .addNodeAddress("redis://10.0.29.30:6379", "redis://10.0.29.95:6379")
        //            .addNodeAddress("redis://10.0.29.205:6379");
        //哨兵
        //config.useSentinelServers().addSentinelAddress("redis://10.0.29.30:27789");

        //单机
//        config.useSingleServer().setAddress("redis://192.168.54.61:6379");
        config.useSingleServer().setAddress("redis://127.0.0.1:6379");
        //              .setPassword().setDatabase()

        RedissonClient redisson = Redisson.create(config);

        //初始化布隆顾虑器
        RBloomFilter<Object> bloomFilter = redisson.getBloomFilter("bloomFilter:province");
        bloomFilter.tryInit(100000000L,0.001);

        // 将数据库中所有省份id放入bloomFilter中
        List<Integer> provinceIdsAll = provinceService.queryProvinceIdsAll();
        provinceIdsAll.forEach(e -> bloomFilter.add(e));

        return bloomFilter;
    }

造成空指针异常的代码 List<Integer> provinceIdsAll = provinceService.queryProvinceIdsAll();

打个断点进入调试模式 可以看到service组件通过@AutoWired注入时为空。

由此可知,@Configuration需要自动注入时@Service的组件时,service层组件还没有被加载到IOC容器中,@Configuration注解加载优先级会高于@Service注解。

此时不能再自动注入,只能手动注入了 运行成功

经验分享 程序员 微信小程序 职场和发展