Spring Boot集成ShedLock后出现UnsatisfiedDependencyException问题排查
问题原因与解决方案
问题原因
- 方法逻辑错误:代码里连续两次调用
connManager.setDefaultMaxPerRoute(),第一次传入全局连接数配置httpConnMaxTotal,第二次才是路由连接数httpConnMaxPerRoute——这不仅是重复设置,更关键的是如果httpConnMaxTotal在test环境下的值为负数或0,就会直接触发"每个路由的最大值不能为负数或零"的错误。 - 配置变量非法:在test或default环境中,
httpConnMaxTotal或httpConnMaxPerRoute的配置值未设置为正整数,可能是配置文件遗漏、变量未正确注入,或是默认值设置错误。
解决办法
- 修正连接管理器配置逻辑:正确区分全局最大连接数和单路由最大连接数的设置方法,代码调整为:
@Profile({"test", "default"}) @Bean(name = "connectionManager") public PoolingHttpClientConnectionManager connectionManagerTest() { PoolingHttpClientConnectionManager connManager = new PoolingHttpClientConnectionManager(); // 设置全局最大连接总数 connManager.setMaxTotal(httpConnMaxTotal); // 设置每个路由的最大连接数 connManager.setDefaultMaxPerRoute(httpConnMaxPerRoute); return connManager; }
- 确保配置变量合法:在test环境配置文件(如
application-test.yml)中明确配置正整数值:
http: conn: max-total: 20 max-per-route: 10
- 添加变量注入兜底值:如果用
@Value注入变量,给变量设置合法默认值避免空值或非法值:
@Value("${http.conn.max-total:10}") private int httpConnMaxTotal; @Value("${http.conn.max-per-route:5}") private int httpConnMaxPerRoute;
内容的提问来源于stack exchange,提问作者runnerpaul
相关产品推荐
相关产品推荐

