1. 首页 > WebSphere教程 > 正文

WebSphere教程FG010-WebSphere数据源配置与数据库集成实战

本文档风哥主要介绍WebSphere Application Server 9.0.5的数据源配置与数据库集成,包括数据源概述、JDBC提供者、连接池机制、驱动配置、数据源创建、连接池配置、数据源测试等内容,风哥教程参考WebSphere官方文档数据源管理章节,适合WebSphere管理员在学习和测试中使用,如果要应用于生产环境则需要自行确认。更多视频教程www.fgedu.net.cn

Part01-基础概念与理论知识

1.1 WebSphere数据源概述

WebSphere数据源是应用访问数据库的标准方式,提供连接池管理、事务支持、安全认证等功能。通过数据源,应用可以高效、安全地访问数据库资源。学习交流加群风哥微信: itpux-com

WebSphere数据源核心功能:

  • 连接池管理:复用数据库连接,提高性能
  • 事务支持:与JTA集成,支持分布式事务
  • 安全认证:统一的认证机制
  • 监控管理:连接使用监控和统计

1.1.1 数据源架构

# WebSphere数据源架构

┌─────────────────────────────────────────────────────────┐
│ 应用程序 │
└─────────────────────────────────────────────────────────┘

│ JNDI查找

┌─────────────────────────────────────────────────────────┐
│ 数据源(DataSource) │
│ ┌─────────────────────────────────────────────────┐ │
│ │ 连接池(Connection Pool) │ │
│ │ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ │ │
│ │ │Conn1│ │Conn2│ │Conn3│ │Conn4│ │Conn5│ │ │
│ │ └─────┘ └─────┘ └─────┘ └─────┘ └─────┘ │ │
│ └─────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────┘

│ JDBC

┌─────────────────────────────────────────────────────────┐
│ 数据库 │
│ (Oracle/MySQL/DB2等) │
└─────────────────────────────────────────────────────────┘

# 数据源配置层次

JDBC提供者(JDBC Provider)
└── 数据源(DataSource)
├── J2C认证别名
├── 连接池
└── 定制属性

# 数据源访问流程
1. 应用通过JNDI查找数据源
2. 数据源从连接池获取连接
3. 应用使用连接执行SQL
4. 应用关闭连接(返回连接池)

1.2 WebSphere JDBC提供者

JDBC提供者是数据源的基础,定义了数据库驱动类型:

1.2.1 JDBC提供者类型

# WebSphere JDBC提供者类型

1. JDBC Type 2
– 使用本地库
– 性能较好
– 需要安装客户端
– 适合Oracle、DB2

2. JDBC Type 4
– 纯Java驱动
– 无需本地库
– 跨平台
– 适合MySQL、PostgreSQL

# 常用JDBC提供者

数据库 提供者名称 驱动类
─────────────────────────────────────────────────────
Oracle Oracle JDBC Driver oracle.jdbc.OracleDriver
MySQL MySQL JDBC Driver com.mysql.jdbc.Driver
DB2 DB2 JDBC Driver com.ibm.db2.jcc.DB2Driver
SQL Server MS SQL JDBC Driver com.microsoft.sqlserver.jdbc.SQLServerDriver
PostgreSQL PostgreSQL JDBC Driver org.postgresql.Driver

# JDBC提供者配置示例

Oracle JDBC提供者:
名称:Oracle JDBC Driver
实现类:oracle.jdbc.OracleDriver
类路径:/WebSphere/lib/ojdbc8.jar
类型:连接池数据源

MySQL JDBC提供者:
名称:MySQL JDBC Driver
实现类:com.mysql.cj.jdbc.Driver
类路径:/WebSphere/lib/mysql-connector-java-8.0.jar
类型:连接池数据源

1.3 WebSphere连接池机制

WebSphere连接池是数据源的核心组件:

1.3.1 连接池工作原理

# WebSphere连接池工作原理

连接池生命周期:
1. 创建连接池
2. 初始化最小连接数
3. 应用请求连接
4. 有空闲连接?返回连接 : 创建新连接
5. 应用使用连接
6. 应用关闭连接(返回连接池)
7. 连接池维护连接

# 连接池关键参数

最小连接数(Minimum Pool Size):
– 连接池初始化时创建的连接数
– 建议值:5-10

最大连接数(Maximum Pool Size):
– 连接池最大连接数
– 建议值:根据并发量设置,通常50-100

连接超时(Connection Timeout):
– 获取连接的最大等待时间
– 建议值:180秒

空闲超时(Idle Timeout):
– 连接空闲多久后被回收
– 建议值:1800秒(30分钟)

最大生命周期(Max Life Time):
– 连接的最大生命周期
– 建议值:0(不限制)或数据库连接限制

# 连接池状态监控

活动连接数:正在使用的连接
空闲连接数:可用的连接
等待线程数:等待获取连接的线程
连接创建数:累计创建的连接数
连接销毁数:累计销毁的连接数

1.4 WebSphere数据库驱动配置

WebSphere数据库驱动配置:

1.4.1 驱动安装

# WebSphere数据库驱动安装

1. 下载驱动
# Oracle JDBC驱动
# 从Oracle官网下载ojdbc8.jar

# MySQL JDBC驱动
# 从MySQL官网下载mysql-connector-java-8.0.jar

2. 安装驱动
# 方式1:复制到WebSphere lib目录
cp ojdbc8.jar /WebSphere/app/lib/
cp mysql-connector-java-8.0.jar /WebSphere/app/lib/

# 方式2:复制到指定目录
mkdir -p /WebSphere/drivers/oracle
cp ojdbc8.jar /WebSphere/drivers/oracle/

mkdir -p /WebSphere/drivers/mysql
cp mysql-connector-java-8.0.jar /WebSphere/drivers/mysql/

3. 设置驱动权限
chown -R websphere:websphere /WebSphere/drivers
chmod -R 755 /WebSphere/drivers

4. 验证驱动
/WebSphere/app/java/bin/jar -tf /WebSphere/drivers/oracle/ojdbc8.jar | grep OracleDriver

oracle/jdbc/OracleDriver.class

# 驱动版本要求

数据库 WebSphere 9.0.5推荐驱动版本
─────────────────────────────────────────────────────
Oracle ojdbc8.jar (12.2+)
MySQL mysql-connector-java-8.0.x
DB2 db2jcc4.jar (4.x+)
SQL Server mssql-jdbc-9.x
PostgreSQL postgresql-42.x

风哥提示:数据库驱动版本需要与数据库版本兼容,建议使用数据库厂商推荐的驱动版本。生产环境建议将驱动文件放在独立目录,便于管理和更新。

Part02-生产环境规划与建议

2.1 WebSphere数据源规划

WebSphere数据源规划需要考虑多个因素:

2.1.1 数据源规划要素

# WebSphere数据源规划要素

1. 数据库类型
– Oracle
– MySQL
– DB2
– SQL Server
– PostgreSQL

2. 数据源作用域
– Cell级别:整个Cell可用
– Node级别:单个Node可用
– Server级别:单个Server可用
– Cluster级别:集群可用

3. 连接池配置
– 最小连接数
– 最大连接数
– 超时设置
– 验证设置

4. 安全配置
– 认证方式
– 用户名密码
– SSL连接

# 数据源规划模板

数据源名称:jdbc/fgedudb
JNDI名称:jdbc/fgedudb
数据库类型:Oracle
数据库URL:jdbc:oracle:thin:@192.168.1.100:1521:fgedudb
作用域:Cell级别
最小连接数:10
最大连接数:50
认证方式:容器管理认证

2.2 WebSphere连接池规划

WebSphere连接池规划建议:

2.2.1 连接池参数规划

# WebSphere连接池参数规划

1. 连接数规划
# 计算公式
最大连接数 = 并发用户数 × 每用户连接数 × 峰值系数

# 示例
并发用户数:100
每用户连接数:0.5(平均每个用户使用0.5个连接)
峰值系数:1.5
最大连接数 = 100 × 0.5 × 1.5 = 75

# 不同规模建议

小型应用(并发<50): - 最小连接数:5 - 最大连接数:20 中型应用(并发50-200): - 最小连接数:10 - 最大连接数:50 大型应用(并发>200):
– 最小连接数:20
– 最大连接数:100

2. 超时规划
连接超时:180秒(等待获取连接)
空闲超时:1800秒(30分钟)
最大生命周期:0(不限制)或根据数据库设置

3. 验证规划
验证连接:启用
验证频率:每次使用前验证
验证SQL:SELECT 1 FROM DUAL(Oracle)

# 连接池监控指标

指标 正常范围 告警阈值
──────────────────────────────────────────
连接使用率 < 80% > 90%
等待线程数 < 5 > 10
连接获取时间 < 100ms > 500ms
连接泄漏 0 > 0

2.3 WebSphere数据源安全配置

WebSphere数据源安全配置:

2.3.1 认证方式

# WebSphere数据源认证方式

1. 容器管理认证
– WebSphere管理用户名密码
– 存储在J2C认证别名中
– 推荐方式

2. 组件管理认证
– 应用管理用户名密码
– 在应用中配置
– 不推荐

3. 无认证
– 不需要认证
– 适合测试环境

# J2C认证别名配置

1. 创建J2C认证别名
# 管理控制台
安全 > 全局安全 > Java认证和授权服务 > J2C认证数据

# wsadmin
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-username fgeduadmin -password fgedu123

# 创建认证别名
security = AdminConfig.getid(‘/Security:/’)
alias = AdminConfig.create(‘JAASAuthData’, security,
‘[[alias fgeduDbAlias] [userId fgedu] [password fgedu123]]’)

AdminConfig.save()

2. 配置数据源使用认证别名
# 在数据源配置中指定组件管理的认证别名

# SSL连接配置
# 数据库URL添加SSL参数
jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=192.168.1.100)(PORT=2484))(CONNECT_DATA=(SERVICE_NAME=fgedudb)))

# 定制属性
javax.net.ssl.trustStore=/WebSphere/ssl/truststore.jks
javax.net.ssl.trustStorePassword=changeit

2.4 WebSphere数据源监控规划

WebSphere数据源监控规划:

2.4.1 监控指标

# WebSphere数据源监控指标

1. 连接池指标
– 活动连接数
– 空闲连接数
– 等待线程数
– 连接使用率

2. 性能指标
– 连接获取时间
– 连接使用时间
– SQL执行时间

3. 错误指标
– 连接失败次数
– 连接泄漏次数
– SQL执行错误

# 监控方式

1. 管理控制台
资源 > JDBC > 数据源 > 监控

2. wsadmin
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-c “print AdminControl.getAttribute(AdminControl.queryNames(‘type=DataSource,name=jdbc/fgedudb,*’), ‘stats’)”

3. PMI
启用数据源PMI统计

# 监控脚本
#!/bin/bash
# ds_monitor.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn

DS_NAME=jdbc/fgedudb

echo “=== 数据源监控 ===”

# 连接池状态
echo “1. 连接池状态:”
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-username fgeduadmin -password fgedu123 << EOF 2>/dev/null

ds = AdminControl.queryNames(‘type=DataSource,name=$DS_NAME,*’)
if ds:
pool = AdminControl.getAttribute(ds, ‘poolConfig’)
print “活动连接: ” + AdminControl.getAttribute(ds, ‘numActive’)
print “空闲连接: ” + AdminControl.getAttribute(ds, ‘numIdle’)
print “等待线程: ” + AdminControl.getAttribute(ds, ‘numWaiting’)
else:
print “数据源未找到”

EOF

echo “=== 监控完成 ===”

Part03-生产环境项目实施方案

3.1 WebSphere数据源创建实战

WebSphere数据源创建操作:

3.1.1 通过管理控制台创建

# 通过管理控制台创建数据源

步骤:
1. 登录管理控制台
https://fgedu-dmgr.net.cn:9043/ibm/console

2. 导航到数据源
资源 > JDBC > 数据源

3. 选择作用域
选择Cell级别

4. 点击”新建”
– 数据源名称:fgedudb
– JNDI名称:jdbc/fgedudb
– 点击”下一步”

5. 选择JDBC提供者
– 选择现有提供者或创建新提供者
– 如果创建新提供者:
– 提供者名称:Oracle JDBC Driver
– 实现类:oracle.jdbc.OracleDriver
– 类路径:/WebSphere/drivers/oracle/ojdbc8.jar
– 点击”下一步”

6. 输入数据库属性
– 数据库URL:jdbc:oracle:thin:@192.168.1.100:1521:fgedudb
– 点击”下一步”

7. 配置安全别名
– 组件管理的认证别名:fgeduDbAlias
– 点击”下一步”

8. 完成创建
– 检查配置摘要
– 点击”完成”

9. 保存配置
– 点击”保存”

10. 测试连接
– 选择数据源
– 点击”测试连接”

3.1.2 通过wsadmin创建

# 通过wsadmin创建数据源

# 连接wsadmin
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-username fgeduadmin -password fgedu123

# 1. 创建JDBC提供者
provider = AdminJDBC.createJDBCProvider(‘[-scope Cell -databaseType Oracle -providerType “Oracle JDBC Driver” -implementationType “Connection pool data source” -name “Oracle JDBC Driver” -description “Oracle JDBC Driver” -classpath [/WebSphere/drivers/oracle/ojdbc8.jar]]’)

# 2. 创建J2C认证别名
security = AdminConfig.getid(‘/Security:/’)
alias = AdminConfig.create(‘JAASAuthData’, security,
‘[[alias fgeduDbAlias] [userId fgedu] [password fgedu123]]’)

# 3. 创建数据源
ds = AdminJDBC.createDataSource(‘[-scope Cell -providerName “Oracle JDBC Driver” -name fgedudb -jndiName jdbc/fgedudb -dataStoreHelperClassName com.ibm.websphere.rsadapter.Oracle11gDataStoreHelper -containerManagedPersistence true -componentManagedAuthenticationAlias fgeduDbAlias -configureResourceProperties [[databaseName fgedudb] [driverType 4] [serverName 192.168.1.100] [portNumber 1521]]]’)

# 4. 保存配置
AdminConfig.save()

# 5. 同步节点
AdminNodeManagement.syncActiveNodes()

# 6. 测试连接
AdminControl.testConnection(AdminConfig.getid(‘/DataSource:fgedudb/’))

# 完整创建脚本
#!/bin/bash
# create_datasource.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn

DS_NAME=fgedudb
JNDI_NAME=jdbc/fgedudb
DB_URL=”jdbc:oracle:thin:@192.168.1.100:1521:fgedudb”
DB_USER=fgedu
DB_PASS=fgedu123

echo “创建数据源: $DS_NAME”

/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-username fgeduadmin -password fgedu123 << 'EOF' # 创建JDBC提供者 print "创建JDBC提供者..." provider = AdminJDBC.createJDBCProvider('[-scope Cell -databaseType Oracle -providerType "Oracle JDBC Driver" -implementationType "Connection pool data source" -name "Oracle JDBC Driver" -description "Oracle JDBC Driver" -classpath [/WebSphere/drivers/oracle/ojdbc8.jar]]') # 创建认证别名 print "创建认证别名..." security = AdminConfig.getid('/Security:/') alias = AdminConfig.create('JAASAuthData', security, '[[alias fgeduDbAlias] [userId fgedu] [password fgedu123]]') # 创建数据源 print "创建数据源..." ds = AdminJDBC.createDataSource('[-scope Cell -providerName "Oracle JDBC Driver" -name fgedudb -jndiName jdbc/fgedudb -dataStoreHelperClassName com.ibm.websphere.rsadapter.Oracle11gDataStoreHelper -containerManagedPersistence true -componentManagedAuthenticationAlias fgeduDbAlias -configureResourceProperties [[URL "jdbc:oracle:thin:@192.168.1.100:1521:fgedudb"]]]') # 保存配置 print "保存配置..." AdminConfig.save() # 同步节点 print "同步节点..." AdminNodeManagement.syncActiveNodes() # 测试连接 print "测试连接..." result = AdminControl.testConnection(AdminConfig.getid('/DataSource:fgedudb/')) print "测试结果: " + result EOF echo "数据源创建完成"

3.2 WebSphere数据源配置实战

WebSphere数据源配置操作:

3.2.1 连接池配置

# WebSphere数据源连接池配置

1. 通过管理控制台配置
资源 > JDBC > 数据源 > fgedudb > 连接池

配置项:
最小连接数:10
最大连接数:50
连接超时:180
空闲超时:1800
最大生命周期:0
reapTime:180
unusedTimeout:1800
agedTimeout:0
purgePolicy:EntirePool

2. 通过wsadmin配置
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-username fgeduadmin -password fgedu123

# 获取数据源
ds = AdminConfig.getid(‘/DataSource:fgedudb/’)

# 获取连接池配置
pool = AdminConfig.list(‘ConnectionPool’, ds)

# 修改连接池参数
AdminConfig.modify(pool, ”’
[[minConnections 10]
[maxConnections 50]
[connectionTimeout 180]
[idleTimeout 1800]
[maxLifeTime 0]
[reapTime 180]
[unusedTimeout 1800]
[agedTimeout 0]
[purgePolicy EntirePool]]
”’)

# 保存配置
AdminConfig.save()

# 同步节点
AdminNodeManagement.syncActiveNodes()

# 验证配置
print AdminConfig.show(pool)

[agedTimeout 0]
[connectionTimeout 180]
[idleTimeout 1800]
[maxConnections 50]
[maxLifeTime 0]
[minConnections 10]
[purgePolicy EntirePool]
[reapTime 180]
[unusedTimeout 1800]

3.2.2 连接验证配置

# WebSphere数据源连接验证配置

1. 配置验证
资源 > JDBC > 数据源 > fgedudb > 定制属性

验证属性:
testOnBorrow:true(借用时验证)
testOnReturn:false(归还时验证)
testWhileIdle:false(空闲时验证)
validationQuery:SELECT 1 FROM DUAL(验证SQL)

2. 通过wsadmin配置
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-username fgeduadmin -password fgedu123

# 获取数据源
ds = AdminConfig.getid(‘/DataSource:fgedudb/’)

# 配置验证
AdminConfig.modify(ds, ”’
[[testOnBorrow true]
[validationQuery “SELECT 1 FROM DUAL”]]
”’)

# 添加定制属性
props = AdminConfig.list(‘PropertySet’, ds)
AdminConfig.create(‘ResourceProperty’, props,
‘[[name testOnBorrow] [type boolean] [value true]]’)
AdminConfig.create(‘ResourceProperty’, props,
‘[[name validationQuery] [type string] [value “SELECT 1 FROM DUAL”]]’)

# 保存配置
AdminConfig.save()

# 验证SQL配置
数据库类型 验证SQL
──────────────────────────────────────────
Oracle SELECT 1 FROM DUAL
MySQL SELECT 1
DB2 SELECT 1 FROM SYSIBM.SYSDUMMY1
SQL Server SELECT 1
PostgreSQL SELECT 1

3.3 WebSphere数据源测试实战

WebSphere数据源测试操作:

3.3.1 连接测试

# WebSphere数据源连接测试

1. 通过管理控制台测试
资源 > JDBC > 数据源 > 选择数据源 > 测试连接

成功输出:
“测试连接成功”

失败输出:
“测试连接失败: [错误信息]”

2. 通过wsadmin测试
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-username fgeduadmin -password fgedu123 \
-c “AdminControl.testConnection(AdminConfig.getid(‘/DataSource:fgedudb/’))”

成功输出:
“连接成功”

失败输出:
“连接失败: [错误信息]”

3. 通过应用测试
# 创建测试JSP
cat > /WebSphere/app/profiles/AppSrv01/installedApps/fgeduCell01/fgeduapp.ear/fgeduweb.war/test.jsp << 'EOF' <%@ page import="javax.naming.*,javax.sql.*,java.sql.*" %>
<% try { Context ctx = new InitialContext(); DataSource ds = (DataSource) ctx.lookup("jdbc/fgedudb"); Connection conn = ds.getConnection(); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT 1 FROM DUAL"); while (rs.next()) { out.println("连接成功: " + rs.getString(1)); } rs.close(); stmt.close(); conn.close(); } catch (Exception e) { out.println("连接失败: " + e.getMessage()); } %>
EOF

# 访问测试页面
curl http://localhost:9080/fgeduapp/test.jsp

连接成功: 1

# 常见测试失败原因

错误信息 原因 解决方案
─────────────────────────────────────────────────────────────────────
ClassNotFoundException 驱动类找不到 检查驱动路径
IoException: Connection refused 数据库连接失败 检查数据库状态和端口
ORA-01017: invalid credentials 认证失败 检查用户名密码
ORA-12514: TNS:listener 服务名错误 检查服务名配置

3.4 WebSphere数据源故障处理

WebSphere数据源故障处理:

3.4.1 连接池耗尽

# WebSphere数据源连接池耗尽处理

故障现象:
应用报错:Connection not available

故障诊断:
1. 检查连接池状态
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-username fgeduadmin -password fgedu123 << EOF ds = AdminControl.queryNames('type=DataSource,name=jdbc/fgedudb,*') if ds: print "活动连接: " + AdminControl.getAttribute(ds, 'numActive') print "空闲连接: " + AdminControl.getAttribute(ds, 'numIdle') print "最大连接: " + AdminControl.getAttribute(ds, 'maxConnections') print "等待线程: " + AdminControl.getAttribute(ds, 'numWaiting') EOF 活动连接: 50 空闲连接: 0 最大连接: 50 等待线程: 10 2. 分析原因 - 连接未释放(连接泄漏) - 连接池太小 - 数据库响应慢 解决方案: 1. 检查连接泄漏 # 查看应用日志 grep -i "connection" /WebSphere/app/profiles/AppSrv01/logs/server1/SystemOut.log # 启用连接泄漏检测 AdminConfig.modify(ds, '[[connectionLeakDetectionEnabled true]]') 2. 增加连接池大小 pool = AdminConfig.list('ConnectionPool', ds) AdminConfig.modify(pool, '[[maxConnections 100]]') 3. 优化数据库 # 检查数据库慢查询 # 优化SQL语句 # 增加数据库资源 # 预防措施 1. 应用正确关闭连接 try { conn = ds.getConnection(); // 使用连接 } finally { if (conn != null) conn.close(); } 2. 使用连接池监控 3. 设置合理的连接池参数

3.4.2 连接超时

# WebSphere数据源连接超时处理

故障现象:
应用报错:Connection timed out

故障诊断:
1. 检查数据库连接
sqlplus fgedu/fgedu123@192.168.1.100:1521/fgedudb

SQL*Plus: Release 19.0.0.0.0 – Production
Connected to:
Oracle Database 19c Enterprise Edition

2. 检查网络
ping 192.168.1.100
telnet 192.168.1.100 1521

3. 检查防火墙
iptables -L -n | grep 1521

解决方案:
1. 检查数据库状态
# 确保数据库服务正常运行
lsnrctl status

2. 检查网络连通性
# 确保网络正常
traceroute 192.168.1.100

3. 检查防火墙规则
# 开放数据库端口
iptables -I INPUT -p tcp –dport 1521 -j ACCEPT

4. 增加连接超时时间
pool = AdminConfig.list(‘ConnectionPool’, ds)
AdminConfig.modify(pool, ‘[[connectionTimeout 300]]’)

# 数据库连接超时配置
Oracle URL格式:
jdbc:oracle:thin:@(DESCRIPTION=(CONNECT_TIMEOUT=10)(TRANSPORT_CONNECT_TIMEOUT=3)(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.100)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=fgedudb)))

MySQL URL格式:
jdbc:mysql://192.168.1.100:3306/fgedudb?connectTimeout=10000&socketTimeout=30000

风哥提示:数据源故障是WebSphere应用常见问题,需要建立完善的监控和告警机制。建议定期检查连接池状态,及时发现和处理连接泄漏问题。学习交流加群风哥QQ113257174

Part04-生产案例与实战讲解

4.1 Oracle数据源配置案例

Oracle数据源配置案例:

4.1.1 案例背景

# Oracle数据源配置案例

企业背景:
– 数据库:Oracle 19c
– 数据库服务器:192.168.1.100
– 端口:1521
– 服务名:fgedudb
– 用户:fgedu
– 密码:fgedu123

配置目标:
– 创建Oracle数据源
– 配置连接池
– 启用连接验证
– 测试连接

4.1.2 配置实施

# Oracle数据源配置实施

1. 准备驱动
# 下载Oracle JDBC驱动
wget https://download.oracle.com/ojdbc8.jar -P /WebSphere/drivers/oracle/

# 验证驱动
/WebSphere/app/java/bin/jar -tf /WebSphere/drivers/oracle/ojdbc8.jar | grep OracleDriver

oracle/jdbc/OracleDriver.class

2. 创建数据源
#!/bin/bash
# create_oracle_ds.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn

echo “创建Oracle数据源…”

/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-username fgeduadmin -password fgedu123 << 'EOF' # 创建JDBC提供者 print "1. 创建JDBC提供者..." AdminJDBC.createJDBCProvider('[-scope Cell -databaseType Oracle -providerType "Oracle JDBC Driver" -implementationType "Connection pool data source" -name "Oracle JDBC Driver" -description "Oracle JDBC Driver" -classpath [/WebSphere/drivers/oracle/ojdbc8.jar]]') # 创建认证别名 print "2. 创建认证别名..." security = AdminConfig.getid('/Security:/') AdminConfig.create('JAASAuthData', security, '[[alias fgeduOracleAlias] [userId fgedu] [password fgedu123]]') # 创建数据源 print "3. 创建数据源..." AdminJDBC.createDataSource(''' [-scope Cell -providerName "Oracle JDBC Driver" -name fgedudb -jndiName jdbc/fgedudb -dataStoreHelperClassName com.ibm.websphere.rsadapter.Oracle11gDataStoreHelper -containerManagedPersistence true -componentManagedAuthenticationAlias fgeduOracleAlias -configureResourceProperties [[URL "jdbc:oracle:thin:@192.168.1.100:1521:fgedudb"]]] ''') # 配置连接池 print "4. 配置连接池..." ds = AdminConfig.getid('/DataSource:fgedudb/') pool = AdminConfig.list('ConnectionPool', ds) AdminConfig.modify(pool, ''' [[minConnections 10] [maxConnections 50] [connectionTimeout 180] [idleTimeout 1800]] ''') # 保存配置 print "5. 保存配置..." AdminConfig.save() # 同步节点 print "6. 同步节点..." AdminNodeManagement.syncActiveNodes() # 测试连接 print "7. 测试连接..." result = AdminControl.testConnection(AdminConfig.getid('/DataSource:fgedudb/')) print "测试结果: " + result EOF echo "Oracle数据源创建完成" 3. 验证配置 # 查看数据源 /WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \ -c "print AdminConfig.list('DataSource')" # 测试连接 /WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \ -c "AdminControl.testConnection(AdminConfig.getid('/DataSource:fgedudb/'))" 连接成功

4.2 MySQL数据源配置案例

MySQL数据源配置案例:

4.2.1 案例背景

# MySQL数据源配置案例

企业背景:
– 数据库:MySQL 8.0
– 数据库服务器:192.168.1.101
– 端口:3306
– 数据库:fgedudb
– 用户:fgedu
– 密码:fgedu123

配置目标:
– 创建MySQL数据源
– 配置连接池
– 配置字符集
– 测试连接

4.2.2 配置实施

# MySQL数据源配置实施

1. 准备驱动
# 下载MySQL JDBC驱动
wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-8.0.33.tar.gz
tar -xzf mysql-connector-java-8.0.33.tar.gz
cp mysql-connector-java-8.0.33/mysql-connector-java-8.0.33.jar /WebSphere/drivers/mysql/

# 验证驱动
/WebSphere/app/java/bin/jar -tf /WebSphere/drivers/mysql/mysql-connector-java-8.0.33.jar | grep Driver

com/mysql/cj/jdbc/Driver.class

2. 创建数据源
#!/bin/bash
# create_mysql_ds.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn

echo “创建MySQL数据源…”

/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-username fgeduadmin -password fgedu123 << 'EOF' # 创建JDBC提供者 print "1. 创建JDBC提供者..." AdminJDBC.createJDBCProvider('[-scope Cell -databaseType MySQL -providerType "MySQL JDBC Driver" -implementationType "Connection pool data source" -name "MySQL JDBC Driver" -description "MySQL JDBC Driver" -classpath [/WebSphere/drivers/mysql/mysql-connector-java-8.0.33.jar]]') # 创建认证别名 print "2. 创建认证别名..." security = AdminConfig.getid('/Security:/') AdminConfig.create('JAASAuthData', security, '[[alias fgeduMySQLAlias] [userId fgedu] [password fgedu123]]') # 创建数据源 print "3. 创建数据源..." AdminJDBC.createDataSource(''' [-scope Cell -providerName "MySQL JDBC Driver" -name fgeduMySQLdb -jndiName jdbc/fgeduMySQLdb -dataStoreHelperClassName com.ibm.websphere.rsadapter.MySQLDataStoreHelper -containerManagedPersistence true -componentManagedAuthenticationAlias fgeduMySQLAlias -configureResourceProperties [[URL "jdbc:mysql://192.168.1.101:3306/fgedudb?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf8"]]] ''') # 配置连接池 print "4. 配置连接池..." ds = AdminConfig.getid('/DataSource:fgeduMySQLdb/') pool = AdminConfig.list('ConnectionPool', ds) AdminConfig.modify(pool, ''' [[minConnections 5] [maxConnections 30] [connectionTimeout 180] [idleTimeout 1800]] ''') # 保存配置 print "5. 保存配置..." AdminConfig.save() # 同步节点 print "6. 同步节点..." AdminNodeManagement.syncActiveNodes() # 测试连接 print "7. 测试连接..." result = AdminControl.testConnection(AdminConfig.getid('/DataSource:fgeduMySQLdb/')) print "测试结果: " + result EOF echo "MySQL数据源创建完成" 3. 验证配置 # 测试连接 /WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \ -c "AdminControl.testConnection(AdminConfig.getid('/DataSource:fgeduMySQLdb/'))" 连接成功

4.3 数据源故障处理案例

数据源故障处理案例:

4.3.1 连接泄漏案例

# 数据源连接泄漏案例

故障现象:
应用运行一段时间后,无法获取数据库连接

故障诊断:
1. 检查连接池状态
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-username fgeduadmin -password fgedu123 << EOF ds = AdminControl.queryNames('type=DataSource,name=jdbc/fgedudb,*') print "活动连接: " + AdminControl.getAttribute(ds, 'numActive') print "空闲连接: " + AdminControl.getAttribute(ds, 'numIdle') print "最大连接: " + AdminControl.getAttribute(ds, 'maxConnections') EOF 活动连接: 50 空闲连接: 0 最大连接: 50 2. 分析日志 grep -i "connection" /WebSphere/app/profiles/AppSrv01/logs/server1/SystemOut.log | tail -20 [4/10/26 10:00:00:000 CST] 00000001 SystemOut O 获取连接成功 [4/10/26 10:00:01:000 CST] 00000001 SystemOut O 获取连接成功 ... # 没有看到关闭连接的日志 3. 分析原因 - 应用获取连接后未关闭 - 连接池连接耗尽 解决方案: 1. 启用连接泄漏检测 /WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \ -username fgeduadmin -password fgedu123 << EOF ds = AdminConfig.getid('/DataSource:fgedudb/') AdminConfig.modify(ds, '[[connectionLeakDetectionEnabled true]]') AdminConfig.save() EOF 2. 修复应用代码 # 错误代码 Connection conn = ds.getConnection(); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT * FROM fgedu_table"); // 处理结果 // 没有关闭连接! # 正确代码 Connection conn = null; Statement stmt = null; ResultSet rs = null; try { conn = ds.getConnection(); stmt = conn.createStatement(); rs = stmt.executeQuery("SELECT * FROM fgedu_table"); // 处理结果 } finally { if (rs != null) rs.close(); if (stmt != null) stmt.close(); if (conn != null) conn.close(); } # 或使用try-with-resources try (Connection conn = ds.getConnection(); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT * FROM fgedu_table")) { // 处理结果 } 3. 重启应用 # 重启应用使代码生效 # 故障处理结果 问题原因:应用未关闭数据库连接 解决方案:修复代码,启用泄漏检测 处理时间:30分钟

Part05-风哥经验总结与分享

5.1 WebSphere数据源配置检查清单

WebSphere数据源配置检查清单:

# WebSphere数据源配置检查清单

创建前检查:
□ JDBC驱动已安装
□ 驱动版本兼容
□ 数据库可访问
□ 用户名密码正确
□ 网络端口开放

配置检查:
□ JDBC提供者配置正确
□ 数据源名称规范
□ JNDI名称正确
□ 连接池参数合理
□ 认证别名配置

测试检查:
□ 连接测试成功
□ 应用可获取连接
□ SQL执行正常
□ 连接正确关闭

监控检查:
□ 连接池监控启用
□ 告警规则配置
□ 日志记录正常

# 数据源配置模板
数据源名称:fgedudb
JNDI名称:jdbc/fgedudb
数据库类型:Oracle
数据库URL:jdbc:oracle:thin:@host:port:service
认证别名:fgeduDbAlias
最小连接数:10
最大连接数:50
连接超时:180秒
空闲超时:1800秒
验证SQL:SELECT 1 FROM DUAL

5.2 WebSphere数据源常见问题

WebSphere数据源常见问题及解决方案:

5.2.1 常见问题汇总

# WebSphere数据源常见问题

问题1:连接测试失败
原因:驱动未安装、URL错误、认证失败
解决:检查驱动、检查URL、检查认证

问题2:连接池耗尽
原因:连接泄漏、连接池太小
解决:修复代码、增加连接池

问题3:连接超时
原因:数据库不可达、网络问题
解决:检查数据库、检查网络

问题4:性能差
原因:连接池配置不当、SQL慢
解决:优化连接池、优化SQL

问题5:认证失败
原因:用户名密码错误、权限不足
解决:检查认证、检查权限

问题6:字符集问题
原因:字符集配置错误
解决:配置正确的字符集

5.3 WebSphere数据源最佳实践

基于多年WebSphere运维经验,总结数据源最佳实践:

5.3.1 配置原则

  • 合理规划连接池:根据并发量设置连接池大小
  • 启用连接验证:确保连接有效性
  • 使用容器认证:统一管理认证信息
  • 监控连接池:及时发现和处理问题

5.3.2 配置建议

  • 驱动管理:统一存放驱动文件,便于管理
  • 连接泄漏检测:启用泄漏检测,及时发现问题
  • 定期测试:定期测试连接,确保数据源可用
  • 文档完善:记录数据源配置和变更
生产环境建议:数据源配置是WebSphere应用与数据库交互的关键,需要精心配置和持续监控。建议建立完善的监控体系,定期检查连接池状态,确保应用稳定运行。from WebSphere视频:www.itpux.com

本文档详细介绍了WebSphere 9.0.5的数据源配置与数据库集成,包括数据源概述、JDBC提供者、连接池机制、驱动配置、数据源创建、连接池配置、数据源测试等内容。通过学习本文档,读者可以掌握WebSphere数据源配置的方法和最佳实践。更多视频教程www.fgedu.net.cn

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息