Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.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 SQLException:I/O错误:读取超时_Java_Sql Server_Spring_Jdbc - Fatal编程技术网

Java SQLException:I/O错误:读取超时

Java SQLException:I/O错误:读取超时,java,sql-server,spring,jdbc,Java,Sql Server,Spring,Jdbc,我有一个JavaSpring应用程序连接到SQLServer数据库 连接设置包括: <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> <property name="driverClass" value="net.sourceforge.jtds.jdbc.Driver" /> <

我有一个JavaSpring应用程序连接到SQLServer数据库

连接设置包括:

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
        destroy-method="close">
        <property name="driverClass" value="net.sourceforge.jtds.jdbc.Driver" />
        <property name="jdbcUrl"
            value="jdbc:jtds:sqlserver://${db.host}:1433/TestDB" />
        <property name="user" value="${db.user}" />
        <property name="password" value="${db.pass}" />

        <!-- these are connection pool properties for C3P0 -->
        <property name="minPoolSize" value="10" />
        <property name="maxPoolSize" value="100" />
        <property name="acquireIncrement" value="5"/>
        <property name="maxIdleTime" value="30000" />
    </bean>
我搜索了很多,但找不到任何线索,任何想法或帮助

我正在使用

<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
    <constructor-arg index="0" ref="sqlSessionFactory" />
</bean>

然后我执行我想要的查询。是否可能因为连接未关闭而存在此错误?

在我的案例中,当夜间db备份作业触发时,连接被删除。我也在使用jtds/SQLServer。以下是我所做的修复:

  • 创建/设置一个运行状况检查cron作业,该作业从应用程序中执行简单的查询,例如一个简短的
    select from
    。大约每10分钟调用一次,并记录结果。它会给你一些反馈,告诉你发生这种情况的时间和原因
  • 减少配置中的空闲时间参数(maxIdleTime),以便自动丢弃旧连接
请记住,如果不更改maxIdleTime并保持多个连接处于打开状态,则即使使用健康检查功能,其中一些连接可能仍处于不良状态。引述自:

默认情况下,池将永远不会使连接过期。如果您希望连接随着时间的推移而过期以保持“新鲜度”,请设置maxIdleTime和/或maxConnectionAge。maxIdleTime定义在从池中剔除连接之前,应允许连接处于未使用状态的秒数。maxConnectionAge强制池剔除从数据库获取的任何连接,超过过去设置的秒数


另一种设置健康检查调用的方法是使用参数。另外,请检查此项,它可以为您提供有关如何设置它的更多想法。

请发布完整的异常堆栈跟踪。另外,您是否确定
db.host
的值正确,并且SQL Server实际上正在侦听该主机上的端口1433?请将连接池属性保留在Server.xml中。这正是适合他们的地方。@YatiSawhney OP正在使用spring,在spring配置中配置它是完全可以接受的。@MarkrotVeel很抱歉,我没有stacktrace的副本,并且此错误尚未再次发生,是的,db.host和port number的值是正确的,因为错误是在应用程序运行时发生的。在这种情况下,这可能只是网络问题,或者是由于不活动导致连接中断。我认为你不必为此担心。如果这种情况发生得更频繁,您可能希望减少
maxIdleTime
(当前值30000秒意味着允许连接在池中空闲(未使用)超过8小时,这有点多),并检查服务器端的超时配置。
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
    <constructor-arg index="0" ref="sqlSessionFactory" />
</bean>
@Autowired  
SqlSession sqlSession;