关于用JDBC连接数据库服务器,非活动超时的问题,请教高手

麻烦问下各位高手,我用JDBC和AS400上DB2进行连接,但是一般过30分钟左右,400就自动把连接给断了,必须重新连接一下才行,哪位大侠知道这个是什么原因?多谢了
这30分钟,我没有做任何操作!
我问了一下AS400的大侠们,他们说数据库都有非活动超时的时间设置,需要在应用服务器上设置一个定时发送虚语句的参数,请教各位高手,在什么地方设置这个参数啊?
还有从现象上看,貌似和服务器关系不是很大,因为,我用同一个JDBC的驱动连不同的AS400的db2数据库,其中一个有这个问题,一个就没有
参与8

6同行回答

Xiao QingXiao Qing系统工程师浪潮商用机器有限公司
Db2 for IBM i和TCP配置中没有空闲超时的设置,这个问题主要是由于网络中的空闲计时器引起的,计时器一般在交换机或防火墙上。报错信息一般在QZDASOINIT作业日志中,系统日志和系统操作员日志中也会有相关记录。建议1.调整交换机和防火墙的idle timeout。2.调整连接池的id...显示全部

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。

仅供参考

收起
系统集成 · 2021-07-09
浏览809
hasheihashei系统工程师万达信息股份有限公司
如果你发生的是我上述所说情况,那说明是正常情况,不用的资源应该返回到连接池中。如果不是,请把连接数据库的方法描述的清楚一些显示全部
如果你发生的是我上述所说情况,那说明是正常情况,不用的资源应该返回到连接池中。如果不是,请把连接数据库的方法描述的清楚一些收起
系统集成 · 2009-06-04
浏览1036
hasheihashei系统工程师万达信息股份有限公司
你是配置的JDBC连接池么,使用连接池的话应该是长连接啊,至少会有初始连接数那么多个连接保持着(在数据源的连接属性里可以设置)。大于初始连接数的连接在shrink Time到来时如果没人使用会被回收。你说的inactive timeout,是指程序在这段时间没有访问数据库后,会把资源返回到连...显示全部
你是配置的JDBC连接池么,使用连接池的话应该是长连接啊,至少会有初始连接数那么多个连接保持着(在数据源的连接属性里可以设置)。大于初始连接数的连接在shrink Time到来时如果没人使用会被回收。你说的inactive timeout,是指程序在这段时间没有访问数据库后,会把资源返回到连接池当中。收起
系统集成 · 2009-06-04
浏览1035

提问者

dqdgxiao
软件工程师中信国安
擅长领域: 中间件

相关问题

相关资料

相关文章

问题状态

  • 发布时间:2009-06-04
  • 关注会员:1 人
  • 问题浏览:8339
  • 最近回答:2021-07-09
  • X社区推广