问题描述 当druid连接池异步初始化连接时,如果是用户自定义了createScheduler时,则此属性会无效
期望 当druid连接池异步初始化连接时,如果用户自定义createScheduler,此时仍然能保持异步初始化连接逻辑
改造点
改造task 如果是异步,增加退出时判断是否达到initialSize,如果未达到则增加新任务
数据源init改造 如果是异步,并且createScheduler不为空,添加一个task 伪代码
if (createScheduler == null) { return; }
if (createTaskCount >= maxCreateTaskCount) { return; }
if (activeCount + poolingCount + createTaskCount >= maxActive) { return; } createTaskCount++; CreateConnectionTask task = new CreateConnectionTask(); createScheduler.submit(task);
原提问者GitHub用户caohongxi
在使用Druid连接池时,如果您启用了异步初始化连接的功能,即将druid.initialSize设置为0,Druid连接池将会异步初始化连接。在这种情况下,如果您想自定义createScheduler,则应该保持异步逻辑一致。
具体来说,如果您的createScheduler是同步的,即在主线程中执行,而Druid连接池的初始化是异步的,那么这可能会导致您的应用程序在初始化连接时出现阻塞或延迟。因此,建议您在异步初始化连接时使用异步的createScheduler。
用户自定义了 createScheduler,而 druid 在异步初始化连接时没有正确地处理该属性所导致的。建议您在 druid 的代码中添加一个判断,以检查 createScheduler 是否为空,如果为空,则直接退出异步初始化连接逻辑。如果 createScheduler 不为空,则根据 createTaskCount 是否达到 maxCreateTaskCount、activeCount 是否达到 maxActive 等条件,来判断是否可以继续异步初始化连接
问题已修复,请用新版本 https://github.com/alibaba/druid/releases/tag/1.1.14
原回答者GitHub用户wenshao
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。