Db2 for IBM i和TCP配置中没有空闲超时的设置,这个问题主要是由于网络中的空闲计时器引起的,计时器一般在交换机或防火墙上。报错信息一般在QZDASOINIT作业日志中,系统日志和系统操作员日志中也会有相关记录。
建议
1.调整交换机和防火墙的idle timeout。
2.调整连接池的idle timeout,使之小于网络的idle timeout。
Connection pool代码的片段,可以用setMaxIdleTime方法设置idle timeout的时间。
public class TestJDBCConnPoolSnippet
{
void test()
{
AS400JDBCManagedConnectionPoolDataSource cpds0 = new AS400JDBCManagedConnectionPoolDataSource();
// Set general datasource properties. Note that both connection pool datasource (CPDS) and managed
// datasource (MDS) have these properties, and they might have different values.
cpds0.setServerName(host);
cpds0.setDatabaseName(host);//iasp can be here
cpds0.setUser(userid);
cpds0.setPassword(password);
cpds0.setSavePasswordWhenSerialized(true);
// Set connection pooling-specific properties.
cpds0.setInitialPoolSize(initialPoolSize_);
cpds0.setMinPoolSize(minPoolSize_);
cpds0.setMaxPoolSize(maxPoolSize_);
cpds0.setMaxLifetime((int)(maxLifetime_/1000)); // convert to seconds
cpds0.setMaxIdleTime((int)(maxIdleTime_/1000)); // convert to seconds
cpds0.setPropertyCycle((int)(propertyCycle_/1000)); // convert to seconds
//cpds0.setReuseConnections(false); // do not re-use connections
3.用命令CHGTCPA减少AS/400的TCP keep-alive时间,使之小于防火墙的idle timer。
仅供参考
收起