Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.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 JDBC连接花费的时间太长_Java_Spring Mvc_Jdbc - Fatal编程技术网

Java JDBC连接花费的时间太长

Java JDBC连接花费的时间太长,java,spring-mvc,jdbc,Java,Spring Mvc,Jdbc,我在Spring MVC JDBC调用中遇到了一个问题。如果我在启动服务器后快速调用,JDBC连接将在一秒钟内建立,数据将被检索。类似地,如果其他DAO彼此快速连续地调用,那么很快就会建立连接。但是,如果我尝试在几分钟后调用DAO,JDBC连接将永远无法完成。它会粘在上面 DataSourceUtils:110-从DataSource获取JDBC连接 我从来没有耐心真正检查恢复连接需要多长时间,但我已经等了10分钟,没有连接的迹象 接下来,我至少尝试重新启动服务器。但是JDBC甚至会阻止服务器的

我在Spring MVC JDBC调用中遇到了一个问题。如果我在启动服务器后快速调用,JDBC连接将在一秒钟内建立,数据将被检索。类似地,如果其他DAO彼此快速连续地调用,那么很快就会建立连接。但是,如果我尝试在几分钟后调用DAO,JDBC连接将永远无法完成。它会粘在上面

DataSourceUtils:110-从DataSource获取JDBC连接

我从来没有耐心真正检查恢复连接需要多长时间,但我已经等了10分钟,没有连接的迹象

接下来,我至少尝试重新启动服务器。但是JDBC甚至会阻止服务器的停止!!控制台卡在这条线上:

DisposableBeanAdapter:327-在名为“dataSource”的bean上调用销毁方法“close”

最终我重新启动Eclipse,它正常工作,直到再次出现时间间隔

这是我对数据源的bean定义:

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
        destroy-method="close">
    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    <property name="url" value="url" />
    <property name="username" value="abc" />
    <property name="password" value="abc" />
    <property name="validationQuery" value="SELECT 1" />
    <property name="testWhileIdle" value="true" />
    <property name="maxActive" value="100" />
    <property name="minIdle" value="10" />
    <property name="initialSize" value="10" />
    <property name="maxIdle" value="20" />
    <property name="maxWait" value="1000" />
</bean>

<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
    <property name="dataSource" ref="dataSource" />
</bean>

<bean id="getDataDao" class="com.project.dao.GetDataDao">
    <constructor-arg index="0" ref="jdbcTemplate" />
    <constructor-arg index="1" value="STORED_PROC_NAME"></constructor-arg>
</bean>
在另一个函数中,我是这样调用SP的:

spOutput = super.execute(spInput);
其中,spOutput和spInput是哈希映射


我的配置是否有问题?TIA。

附加代码有帮助,但我没有看到任何会导致您看到的问题的代码。您看到的问题最可能的原因是连接正在从池中拉出,但它们不会返回,并且池最终会变得饥饿。dbcp池随后会阻止您关闭,因为这些连接仍然处于打开状态,并且可能处于挂起状态

为了验证,您可以尝试将maxActive和类似的设置设置设置为更低的值,甚至可能是1,然后验证是否立即出现相同的问题

您是否已验证存储过程正在返回?i、 实际上,每次调用都会得到spOutput,而存储过程本身并不是一致或随机挂起的


如果是这样,我唯一的另一个建议是发布更多的代码,特别是从引导到GetDataDao的调用堆栈中,并包括DAO中发出sp.execute调用的任何方法。假设您没有使用事务,但如果使用了,那么在代码中显示您在何处启动/提交事务也将非常重要。

我也有同样的问题。我发现这个问题与一个特定的查询是一致的,检查了这个查询,发现这个问题在查询本身中。单独运行查询也需要时间。查询正在将列转换为lower,但该列未编制索引。查询就像LowerTrim列的名称一样,删除了LowerTrim和trim。从那以后,它工作得非常好

不是在你的配置中,我怀疑是在你的代码中。。。不要自己获取连接并使用spring管理的事务。如果您不这样做,您的池将最终耗尽可用的连接。在您的情况下,在大约100个请求之后,除非您将MySQL配置为不允许这些连接。Eclipse与此无关。我不明白为什么人们在遇到问题时会提到他们的IDE。Spring每天在我的应用程序中都能正确地做到这一点;这是你的代码中的一些东西。修改你的问题并在你得到的地方发布代码并使用连接。我怀疑Eclipse是否相关。您可以通过关闭Eclipse、在本地部署对Tomcat的WAR并启动它来证明这一点。如果这种行为持续存在,那么Eclipse就不会参与其中。这正是我的观点。Eclipse不相关。spOutput不会正确返回数据。它仅在连接时挂起。一旦建立,SP将快速执行并检索数据。我认为它们与代码的其余部分无关。这与JDBC连接无关。@javaGirl243-我没有投你反对票,但我认为这是因为你的问题不清楚,并且没有足够的信息让别人真正帮助你。同样,我的回答被否决了,可能是因为我没有提供一个简洁的答案,而否决者认为你的问题不应该得到回答。建议发布一个新问题,但要保持简洁,并显示我在回答中提到的缺失代码。StutoPoad并不总是对新手来说是友好的地方,但仍然是为了保持一定质量的问题和答案。如果你决定发布一个新问题,考虑删除这个问题。
spOutput = super.execute(spInput);