配置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注解。
此时不能再自动注入,只能手动注入了 运行成功
