WebLogic配置JDBC数据源时JNDI名必须带jdbc/前缀;GridLink数据源须用RAC SCAN地址;testTableName应设为DUAL或有效表名;集群中数据源需部署到所有受管服务器。
WebLogic 控制台里配 JDBC 数据源,JNDI 名必须带 jdbc/ 前缀
weblogic 对 jndi 命名有硬性约束:不加 jdbc/ 前缀,应用 lookup 时会直接抛 javax.naming.namenotfoundexception。这不是配置遗漏,是 weblogic 的命名空间校验逻辑强制要求。
实操建议:
- 在控制台「JDBC → 数据源」新建时,
JNDI Name字段填jdbc/myapp_ds,不是myapp_ds或java:comp/env/jdbc/myapp_ds - Spring Boot 应用里用
@ConfigurationProperties("spring.datasource.jndi-name")绑定时,值必须写成jdbc/myapp_ds - 如果已有老应用依赖无前缀的 JNDI 名,别改代码——改 WebLogic 的
Deployment Descriptor(weblogic.xml)里加<jndi-name>jdbc/myapp_ds</jndi-name>映射
GridLink 数据源必须用 Oracle RAC SCAN 地址,不能填单节点 VIP
GridLink 不是普通多数据源轮询,它靠 Oracle 官方的 OracleConnectionPoolDataSource 实现 RAC 实例状态感知和故障转移。填错地址会导致连接池启动失败,日志里反复刷 Failed to create connection pool 和 ORA-12545。
实操建议:
- 在控制台「JDBC → 网格链接数据源」中,
Database URL必须是形如jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=myrac-scan)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=mydb))) - 确认 DNS 能解析
myrac-scan,且 WebLogic 所在主机的/etc/hosts没有错误静态映射 - 不要勾选
Test Connections On Reserve—— GridLink 自身已做连接健康检查,开这个反而加重 SCAN 负载,引发间歇性超时
testTableName 配置为空字符串或 SQL IS VALID 会绕过实际连通性检测
WebLogic 默认用 SELECT COUNT(*) FROM DUAL 测连通性。但很多人把 testTableName 改成空或非法值,以为能跳过检测,结果导致连接池返回已失效连接,应用报 SQLException: Closed Connection。
实操建议:
- 保持
testTableName为默认值DUAL,或设为业务库中一个轻量、稳定存在的表(如SYSTEM.DUAL) - 若数据库禁用
DUAL,可设为testTableName=SELECT 1 FROM DUAL(注意这是完整 SQL,不是表名) - 避免设
testTableName=SQL IS VALID—— 这个字符串会被 WebLogic 当作表名拼进 SQL,最终执行SELECT COUNT(*) FROM "SQL IS VALID",必然失败
集群环境里数据源必须部署到所有受管服务器,否则 JNDI 查找跨节点失败
WebLogic 的 JNDI 是本地绑定机制,不是全局注册中心。如果只在 AdminServer 上部署数据源,集群里的 Managed Server 启动后查不到 jdbc/myapp_ds,lookup 返回 null,Spring 初始化直接报 DataSourceLookupFailureException。
实操建议:
- 创建数据源时,在控制台最后一步务必勾选
Deployments → Targets下全部 Managed Server 和集群(Cluster),不要只选 AdminServer - 用 WLST 脚本部署时,确保
target参数包含所有目标服务器名,例如:deploy('myds', '/path/to/ds.xml', targets='cluster1,ms1,ms2') - 上线后验证:登录任意一台 Managed Server 的控制台 → 「Services → Data Sources」,确认列表里有该数据源且状态为
Active
GridLink 的故障转移能力再强,也救不了 JNDI 根本没绑定到节点上的情况。这点最容易被忽略——因为单机测试时一切正常,一上集群就崩。

















