dromara / dromara/liteflow

liteflow-rule-sql多数据源连接泄漏

Open
#83 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Java
Stars
3.9k
Forks
525
PR merge metrics
No merged PRs in 30d

Description

# 问题版本
```xml

com.yomahub
liteflow-rule-sql
2.12.2

```

# 使用场景
`规则配置源`使用`SQL数据库配置源`,并开启自动轮询刷新
```yml
liteflow:
rule-source-ext-data-map:
...
pollingEnabled: true
pollingIntervalSeconds: 60
pollingStartSeconds: 60
...
```

# 问题现象
数据库连接泄漏,占满连接池,均指向`CHECK_SQL_PATTERN = "SELECT {},{} FROM {}"`轮询检查sql
```
[arthas@1]$ vmtool --action getInstances --className com.alibaba.druid.pool.DruidDataSource --express 'instances[2].getActiveCount()'
@Integer[100]
[arthas@1]$ vmtool --action getInstances --className com.alibaba.druid.pool.DruidDataSource --express 'instances[2].getDataSourceStat().getConnectionList()'
```

# 问题代码
项目中配置了多数据源,指向同一个数据库,如sharding
在`com.yomahub.liteflow.parser.sql.util`包的`LiteFlowJdbcUtil`类的`getConn`方法中
遍历多数据源从for循环中取出`connection = dataSource.getConnection();`后,多数据源均满足条件,被重复赋值的`connection`对象没有执行close方法手动关闭,引发连接泄漏

![Image](https://github.com/user-attachments/assets/b4076958-f28f-4810-9e58-150ff1082f0c)

# 建议
建议在for循环中,获取到连接后,直接break跳出并在方法中返回该连接对象

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.