AS400 - JT400 - 如何结束正在运行的作业
我在使用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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。