Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JDBCTemplate挂起_Java_Spring_Spring Jdbc - Fatal编程技术网

Java JDBCTemplate挂起

Java JDBCTemplate挂起,java,spring,spring-jdbc,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,

我正在使用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;
}
私有字符串getXXX(字符串表)
{
系统输出打印项次(“测试1”);
最终列表数据=getJdbcTemplate().queryForList(选择,
新对象[]{table},String.class);
系统输出打印项次(“测试2”);
ret=data.size()>0?data.get(0):null;
返回ret;
}

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

问题可能不在Java层

首先,请检查您的:

  • DB-尝试使用DB工具执行相同的查询(Toad, sqlplus、sqldeveloper等)并确保数据库正常工作。问题 可能位于您的DB对象上(它可以被其他会话锁定)

  • 网络-同样的问题可能是因为延迟不好。确保您的网络工作正常

  • 尝试使用普通JDBC测试相同的查询

  • 问题似乎是您没有关闭连接

    final List data = getJdbcTemplate().queryForList(SELECT_TBL_NME, new Object[] { table}, String.class);
    
    上面这一行永远不会结束,因为JdbcTemplate正在等待从db获得连接

    所以,如果您的数据库不能给您一个连接,您的应用程序正在等待,等待,等待,它不做任何事情的时间

    可能的修复方法:由于您正在使用Spring,请检查您没有在
    queryForList
    方法之外执行操作


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

    如何定义jdbcTemplate使用的数据源?看起来它无法连接到数据库。我的类正在扩展JDBCDAO支持,在我的bean中
    如果您从main以外的其他线程运行它,请确保正确处理错误日志记录。因为可能是这样的,您的查询只是默默地失败了,并且您没有看到预期的结果。对于reply infate,我正在使用Toad连接oracle 10g,在Toad端没有这样的问题。我试过简单的JDBC,它很管用。但是在我的项目中,使用JDBCTemplete会触发查询。因此,我们不能转向普通的JDBC。我仍然感到困惑,为什么它没有在JDBCTemplateTanx中抛出任何错误以进行回复,但我已经将所有JDBCTemplate调用转换为具有适当连接关闭机制的普通JDBC并进行了部署。