Java SQLException:I/O错误:读取超时
我有一个JavaSpring应用程序连接到SQLServer数据库 连接设置包括: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" /> <
<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作业,该作业从应用程序中执行简单的查询,例如一个简短的
。大约每10分钟调用一次,并记录结果。它会给你一些反馈,告诉你发生这种情况的时间和原因select from
- 减少配置中的空闲时间参数(maxIdleTime),以便自动丢弃旧连接
另一种设置健康检查调用的方法是使用参数。另外,请检查此项,它可以为您提供有关如何设置它的更多想法。请发布完整的异常堆栈跟踪。另外,您是否确定
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;