Java DB2JDBC驱动程序不释放表锁

Java DB2JDBC驱动程序不释放表锁,java,jdbc,db2,transactions,jndi,Java,Jdbc,Db2,Transactions,Jndi,情境:我们在tomcat上运行一个web服务,访问AS400上的DB2数据库,我们正在使用JTOPEN驱动程序处理tomcat处理的JNDI连接。为了处理事务和访问数据库,我们使用Spring 对于每个select系统,它从JNDI(即从连接池)获取JDBC连接,进行选择,最后按顺序关闭ResultSet、语句并释放连接。这很好,表上的共享锁将出现 当我们想要以与select相同的方式进行更新时(ResultSet对象上的异常,在这种情况下我们没有异常),在释放表上JNDI锁的连接之后 如果我们

情境:我们在tomcat上运行一个web服务,访问AS400上的DB2数据库,我们正在使用JTOPEN驱动程序处理tomcat处理的JNDI连接。为了处理事务和访问数据库,我们使用Spring

对于每个select系统,它从JNDI(即从连接池)获取JDBC连接,进行选择,最后按顺序关闭ResultSet、语句并释放连接。这很好,表上的共享锁将出现

当我们想要以与select相同的方式进行更新时(ResultSet对象上的异常,在这种情况下我们没有异常),在释放表上JNDI锁的连接之后

如果我们在JNDI配置中为连接数设置maxIdle=0,这个问题就会消失,但这会降低性能,我们在该服务上有100个cca用户在线,我们需要很少的连接才能在池中活动


你有什么建议

听起来好像自动提交在默认情况下是禁用的,并且代码没有在任何地方调用
connection.commit()
。要解决此问题,请配置连接池,使其仅返回带有
autoCommit=true
的连接,或者更改JDBC代码,使其在执行SQL操作的
try
块末尾提交事务。

请查看


在同样的情况下,它对我也有帮助。

当然,我们确实提交了我们的事务。我们得出结论,如果我们在同一张表上有两项交易的组合;一个update和一个select,都是合法的commit()-ed,只有在这种情况下,我们才锁定了表。这个问题似乎与db2有关,实际上它是一个特性:也许您可以描述到底有什么帮助,并保留链接以供参考。看一看。