【发布时间】:2018-08-16 21:37:04
【问题描述】:
我有一个连接到 SQL Server 数据库的 Java Spring 应用程序。
连接设置为:
<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>
一切正常,但有时我收到以下错误:
Could not open JDBC Connection for the transaction; nested exception is java.sql.SQLException: I/O Error: Read timed out
我搜索了很多,但找不到任何线索、任何想法或帮助?
我正在使用
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="sqlSessionFactory" />
</bean>
在我的spring-config xml 中获取我的sqlSession,并在我使用的 DAO 中:
@Autowired
SqlSession sqlSession;
然后我执行我想要的查询。有没有可能是因为连接没有关闭而存在这个错误?
【问题讨论】:
-
请发布完整的异常堆栈跟踪。另外,您确定
db.host的值正确,并且 SQL Server 实际上正在侦听该主机上的端口 1433? -
在 server.xml 中保留连接池属性。那是适合他们的地方。
-
@YatiSawhney OP 正在使用 spring,在 spring config 中配置它是完全可以接受的。
-
@MarkRotteveel 抱歉,我没有堆栈跟踪的副本,并且此错误还没有再次发生,是的,db.host 和端口号的值是正确的,因为错误发生在应用程序已经在运行
-
在这种情况下,这可能只是网络问题,或者由于不活动而导致连接中断。我不认为你需要担心它。如果它发生得更频繁,您可能需要减少
maxIdleTime(当前值 30000 秒意味着允许连接在池中空闲(未使用)超过 8 小时,这有点多),并检查服务器端的超时配置。
标签: java sql-server spring jdbc