AS400 - JT400 - 如何结束正在运行的作业

编程语言 2026-07-12

我在使用dq.read(0) 从dataq监听数据。但是每次这样做,AS/400会创建一个新的活动作业,这些作业会随着时间逐渐增多。

有没有办法终止活动作业?

我想用dq.read(0) 而不是dq.read(-1),因为有时它会卡住,甚至在我没有运行代码时也会一直监听dataq。

下面是我的代码大致如下

 from com.ibm.as400.access import AS400, DataQueue
    import system

    as400 = AS400("SYSD.ASPAC.INT.GRP", "username", "password")
    dq = DataQueue(as400, "/QSYS.LIB/FISDTA.LIB/FINCTQ.DTAQ")    

    if currentValue != 0:
        entry = dq.read(0)  # non-blocking read

解决方案

完成后你是否已经断开连接?以下任一方法都应该奏效,最佳选项取决于你代码的其他部分。

as400.disconnectService(AS400.DATAQUEUE)

as400.disconnectAllServices()

as400.close()

as400.resetAllServices()

这应该可以阻止出现同时连接的多个作业。

请注意,反复连接和断开连接在性能方面并不理想,如果你关心这一点的话。

如果确实关心这一点,可以考虑使用连接池

AS400ConnectionPool pool = new AS400ConnectionPool();

// Retrieve a system object specifically for Data Queue services
AS400 sys = pool.getConnection("systemName", "user", "password", AS400.DATAQUEUE);

try {
    DataQueue dq = new DataQueue(sys, "/QSYS.LIB/MYLIB.LIB/MYQUEUE.DTAQ");
    // Perform your read/write operations
} finally {
    // Crucial: Return the connection to the pool, do not disconnect it
    pool.returnConnectionToPool(sys);
}
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章