WebSphere教程FG010-WebSphere数据源配置与数据库集成实战
本文档风哥主要介绍WebSphere Application Server 9.0.5的数据源配置与数据库集成,包括数据源概述、JDBC提供者、连接池机制、驱动配置、数据源创建、连接池配置、数据源测试等内容,风哥教程参考WebSphere官方文档数据源管理章节,适合WebSphere管理员在学习和测试中使用,如果要应用于生产环境则需要自行确认。更多视频教程www.fgedu.net.cn
Part01-基础概念与理论知识
1.1 WebSphere数据源概述
WebSphere数据源是应用访问数据库的标准方式,提供连接池管理、事务支持、安全认证等功能。通过数据源,应用可以高效、安全地访问数据库资源。学习交流加群风哥微信: itpux-com
- 连接池管理:复用数据库连接,提高性能
- 事务支持:与JTA集成,支持分布式事务
- 安全认证:统一的认证机制
- 监控管理:连接使用监控和统计
1.1.1 数据源架构
┌─────────────────────────────────────────────────────────┐
│ 应用程序 │
└─────────────────────────────────────────────────────────┘
│
│ 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提供者类型
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 连接池工作原理
连接池生命周期:
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 驱动安装
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 数据源规划要素
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 连接池参数规划
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 认证方式
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 监控指标
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
/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 连接池配置
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 连接验证配置
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 连接测试
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 连接池耗尽
故障现象:
应用报错: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 连接超时
故障现象:
应用报错: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
Part04-生产案例与实战讲解
4.1 Oracle数据源配置案例
Oracle数据源配置案例:
4.1.1 案例背景
企业背景:
– 数据库:Oracle 19c
– 数据库服务器:192.168.1.100
– 端口:1521
– 服务名:fgedudb
– 用户:fgedu
– 密码:fgedu123
配置目标:
– 创建Oracle数据源
– 配置连接池
– 启用连接验证
– 测试连接
4.1.2 配置实施
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 8.0
– 数据库服务器:192.168.1.101
– 端口:3306
– 数据库:fgedudb
– 用户:fgedu
– 密码:fgedu123
配置目标:
– 创建MySQL数据源
– 配置连接池
– 配置字符集
– 测试连接
4.2.2 配置实施
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数据源配置检查清单:
创建前检查:
□ 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 常见问题汇总
问题1:连接测试失败
原因:驱动未安装、URL错误、认证失败
解决:检查驱动、检查URL、检查认证
问题2:连接池耗尽
原因:连接泄漏、连接池太小
解决:修复代码、增加连接池
问题3:连接超时
原因:数据库不可达、网络问题
解决:检查数据库、检查网络
问题4:性能差
原因:连接池配置不当、SQL慢
解决:优化连接池、优化SQL
问题5:认证失败
原因:用户名密码错误、权限不足
解决:检查认证、检查权限
问题6:字符集问题
原因:字符集配置错误
解决:配置正确的字符集
5.3 WebSphere数据源最佳实践
基于多年WebSphere运维经验,总结数据源最佳实践:
5.3.1 配置原则
- 合理规划连接池:根据并发量设置连接池大小
- 启用连接验证:确保连接有效性
- 使用容器认证:统一管理认证信息
- 监控连接池:及时发现和处理问题
5.3.2 配置建议
- 驱动管理:统一存放驱动文件,便于管理
- 连接泄漏检测:启用泄漏检测,及时发现问题
- 定期测试:定期测试连接,确保数据源可用
- 文档完善:记录数据源配置和变更
本文档详细介绍了WebSphere 9.0.5的数据源配置与数据库集成,包括数据源概述、JDBC提供者、连接池机制、驱动配置、数据源创建、连接池配置、数据源测试等内容。通过学习本文档,读者可以掌握WebSphere数据源配置的方法和最佳实践。更多视频教程www.fgedu.net.cn
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
