开发者社区> 问答> 正文

当druid连接池异步初始化连接时,是否用户自定义createScheduler应该保持异步逻辑一致

问题描述 当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

展开
收起
山海行 2023-07-05 20:19:51 132 0
3 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    在使用Druid连接池时,如果您启用了异步初始化连接的功能,即将druid.initialSize设置为0,Druid连接池将会异步初始化连接。在这种情况下,如果您想自定义createScheduler,则应该保持异步逻辑一致。

    具体来说,如果您的createScheduler是同步的,即在主线程中执行,而Druid连接池的初始化是异步的,那么这可能会导致您的应用程序在初始化连接时出现阻塞或延迟。因此,建议您在异步初始化连接时使用异步的createScheduler。

    2023-07-30 14:35:15
    赞同 展开评论 打赏
  • 用户自定义了 createScheduler,而 druid 在异步初始化连接时没有正确地处理该属性所导致的。建议您在 druid 的代码中添加一个判断,以检查 createScheduler 是否为空,如果为空,则直接退出异步初始化连接逻辑。如果 createScheduler 不为空,则根据 createTaskCount 是否达到 maxCreateTaskCount、activeCount 是否达到 maxActive 等条件,来判断是否可以继续异步初始化连接

    2023-07-11 10:02:24
    赞同 展开评论 打赏
  • 问题已修复,请用新版本 https://github.com/alibaba/druid/releases/tag/1.1.14

    原回答者GitHub用户wenshao

    2023-07-06 11:22:20
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载