You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

WebLogic数据源设最大2连接池,Oracle为何生成大量会话?

为什么WebLogic连接池设为2,Oracle却出现大量会话?

这问题我碰到过好多次,咱们一步步拆解可能的原因:


1. 集群环境下的多节点连接池叠加

如果你的WebLogic是集群部署,每个服务器节点都会维护独立的连接池实例。比如你有5个节点,每个节点的最大连接数设为2,那理论上最多会产生10个数据库会话——每个节点的连接池都能用到上限,加起来就远超你预期的2个了。

2. 连接泄漏触发了应急连接

如果你的Spring Boot服务在获取数据库连接后,没有正确释放(比如try-with-resources用错了,或者异常分支里没关闭连接),WebLogic的连接池会认为这些连接还在被占用。当新请求进来且等待连接超时后,有些应用服务器会触发紧急连接机制——临时创建超出最大连接数的连接来处理请求,这就会导致Oracle里出现额外的会话。

3. 数据源配置根本没生效

别笑,这种情况真的很常见:你改了最大连接数,但要么没重启WebLogic让配置生效,要么改的是另一个没用的数据源(比如你以为改了app-ds,但应用实际引用的是old-app-ds)。建议直接登录WebLogic控制台,找到对应的数据源,查看当前生效的连接池参数,确认最大连接数确实是2。

4. Spring Boot自动配置“抢了饭碗”

Spring Boot默认会自动配置自己的数据源(比如HikariCP),如果你没正确配置让它使用WebLogic的JNDI数据源,就会出现:你以为用的是WebLogic的连接池,但实际Spring Boot偷偷启动了自己的连接池,而且这个连接池的参数没做限制,自然会生成大量连接。

检查你的application.properties/application.yml,确保配置了:

spring.datasource.jndi-name=jdbc/你的WebLogic数据源名称

同时删掉那些会触发自动配置的参数(比如spring.datasource.urlspring.datasource.username)——这些参数一旦存在,Spring Boot就会跳过JNDI,自己创建数据源。

5. 应用里存在“野路子”连接

如果你的45个Rest服务里,有些服务没统一用WebLogic的数据源,而是直接通过DriverManager或者其他方式创建JDBC连接,那这些连接完全不受WebLogic连接池的管控,每创建一个就会在Oracle里生成一个新会话。排查代码里有没有类似这样的硬编码:

Connection conn = DriverManager.getConnection(url, user, pwd);

排查步骤建议

  1. 先去WebLogic控制台看连接池的实时状态:活跃连接数、已创建连接数是不是和配置一致。
  2. 确认Spring Boot的数据源配置完全指向WebLogic的JNDI,没有启用自动配置的数据源。
  3. 全局搜索代码,排查有没有直接创建JDBC连接的地方。
  4. 如果是集群,统计所有节点的连接数总和,看是不是等于「节点数 × 最大连接数」。

内容的提问来源于stack exchange,提问作者Gowtham Chinatalacheruvu

火山引擎 最新活动