JDBCTemplate挂起

时间:2012-07-17 13:59:57

标签: java spring spring-jdbc

我正在使用JDBCTemplate。对于一个特定查询,JDBCTemplate在调用超过3-4次后挂起,有时在15-20次尝试后挂起。我的代码中没有发现任何错误。

private String getXXX(String table)
{
    System.out.println("Test 1");
    final List<String> data = getJdbcTemplate().queryForList(SELECT_TBL_NME,
                new Object[] { table }, String.class);
    System.out.println("Test 2");
    ret = data.size() > 0 ? data.get(0) : null;
    return ret;
}

如果调用该函数超过15次,有时甚至在第3次或第4次调用之后,控制台在“测试1”处挂起而没有任何错误。

2 个答案:

答案 0 :(得分:1)

问题似乎是你没有关闭连接。

final List data = getJdbcTemplate().queryForList(SELECT_TBL_NME, new Object[] { table}, String.class);

上面的行永远不会结束,因为JdbcTemplate正在等待从您的数据库获取连接。

因此,如果您的数据库无法为您提供连接,您的应用程序正在等待,等待,等待,并且它不会对时间做任何事情。

可能的修复:由于您使用的是Spring,请检查您是否在queryForList方法之外进行操作。

几个月前我遇到了同样的问题,因为我在queryForList方法之外调用了ResultSet.getMetaData()并且没有释放/关闭连接。

答案 1 :(得分:0)

问题可能不在Java层。

首先尝试检查一下:

  1. DB - 使用数据库工具尝试使用相同的查询(Toad, sqlplus,SQL Developer等)并确保数据库正常工作。问题 可以在你的DB对象上(它可以被其他一些会话锁定)。

  2. 网络 - 同样的问题可能是由于延迟不良。确保您的网络运行良好。

  3. 尝试使用普通JDBC测试相同的查询。