Unable to init enough connections amount! Only 21 of 24 were initialized… 的解决办法
很讨厌,今天碰到了引入Redisson后 ,启动模块竟然碰到了**Unable to init enough connections amount! Only 21 of 24 were initialized…**这种问题。
可是同一个项目的另一个模块却不报错。研究了半天,发现竟然是…
问题的起源
b模块的pom中引入了项目公共的common这个pom,并排除了common模块中的2个包:
<dependency>
<groupId>com.abcdxxx.mall</groupId>
<artifactId>common</artifactId>
<version>0.0.1-SNAPSHOT</version>
<exclusions>
<exclusion>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
</exclusion>
<exclusion>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-seata</artifactId>
</exclusion>
</exclusions>
</dependency>
然后引入了redisson:
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
</dependency>
配好了配置文件:
@Configuration
public class MyRedissonConf {
@Bean(destroyMethod = "shutdown")
public RedissonClient myRedisson() {
Config config=new Config();
config.useSingleServer().setAddress("redis://192.168.100.188:6379");
RedissonClient redissonClient=Redisson.create(config);
return redissonClient;
}
}
程序中引入并实例化后。
启动项目,竟然报错:
Unable to init enough connections amount! Only 21 of 24 were initialized…
但是另一个模块启动redission后正常运行,很是诧异。
解决办法:
网上各种查找解决办法,说是添加下面这行能解决 :config.useSingleServer().setConnectionMinimumIdleSize(10);
@Configuration
public class MyRedissonConf {
@Bean(destroyMethod = "shutdown")
public RedissonClient myRedisson() {
Config config=new Config();
config.useSingleServer().setAddress("redis://192.168.100.188:6379");
==***config.useSingleServer().setConnectionMinimumIdleSize(10);***==
RedissonClient redissonClient=Redisson.create(config);
return redissonClient;
}
}
发现这个方法倒是可以解决不能连接的问题,但是又出了一个问题:
redis里出现了2个一模一样的DB, 让我感到这个解决办法不是很满意。
最后发现,在引入公共pom中不排除mybits数据源:
<dependency>
<groupId>com.abcdxxx.mall</groupId>
<artifactId>common</artifactId>
<version>0.0.1-SNAPSHOT</version>
<exclusions>
<exclusion>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-seata</artifactId>
</exclusion>
</exclusions>
</dependency>
然后,在启动类上排除数据源 (exclude = DataSourceAutoConfiguration.class)
@EnableFeignClients
@EnableDiscoveryClient
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
public class AbcdxxxApplication {
public static void main(String[] args) {
SpringApplication.run(SeckillApplication.class, args);
}
}
然后,重新启动项目,就一切OK了。
我这个解决办法,希望能帮助到大家。
最后:
为什么会产生这个Unable to init enough connections amount! Only 21 of 24 were initialized…,
可能的原因是程序产生了循环引用,可以参考这篇文章: https://blog.csdn.net/qq_41731316/article/details/119803796。