我正在使用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”处挂起而没有任何错误。
答案 0 :(得分:1)
问题似乎是你没有关闭连接。
final List data = getJdbcTemplate().queryForList(SELECT_TBL_NME, new Object[] { table}, String.class);
上面的行永远不会结束,因为JdbcTemplate正在等待从您的数据库获取连接。
因此,如果您的数据库无法为您提供连接,您的应用程序正在等待,等待,等待,并且它不会对时间做任何事情。
可能的修复:由于您使用的是Spring,请检查您是否在queryForList
方法之外进行操作。
几个月前我遇到了同样的问题,因为我在queryForList
方法之外调用了ResultSet.getMetaData()并且没有释放/关闭连接。
答案 1 :(得分:0)
问题可能不在Java层。
首先尝试检查一下:
DB - 使用数据库工具尝试使用相同的查询(Toad, sqlplus,SQL Developer等)并确保数据库正常工作。问题 可以在你的DB对象上(它可以被其他一些会话锁定)。
网络 - 同样的问题可能是由于延迟不良。确保您的网络运行良好。