【问题标题】:Connection exception using Spring JDBC Template使用 Spring JDBC 模板的连接异常
【发布时间】:2012-11-09 13:26:35
【问题描述】:

我有一个使用 Spring 开发的简单 Web 应用程序,最近我遇到了一些数据库连接问题。我的数据库在 MS SQL Server 2005 上。

为了检索数据,我使用框架提供的 JDBCTemplate 类实现了几个 DAO。

有时我会遇到这个异常:

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.dao.DataAccessResourceFailureException: StatementCallback; SQL [SELECT [Campaigns].[CampaignID],[CampaignCode],[CampaignType],[StartDate],[EndDate],[Status],[FirstUpdate],[LastUpdate],[FirstUpdateUserID],[LastUpdateUserID],[CampaignDescriptions].[Description] FROM [Campaigns] INNER JOIN [CampaignDescriptions] ON [Campaigns].[CampaignID] = [CampaignDescriptions].[CampaignID] ORDER BY [StartDate] DESC]; Connection reset by peer: socket write error; nested exception is com.microsoft.sqlserver.jdbc.SQLServerException: Connection reset by peer: socket write error
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:894)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

该异常似乎仅在执行报告的查询时发生。

我不明白是什么导致了这个问题。有什么想法吗?

执行查询的方法是:

@Transactional(propagation = Propagation.NEVER)
public Campaign[] getAll() {
    List<Campaign> campList = getJdbcTemplate()
            .query(BASE_QUERY,
                    new CampaignMapper());
    return campList.toArray(new Campaign[0]);
}

其中BASE_QUERY 与异常消息中的相同。

【问题讨论】:

  • 错误的相关部分是:“SQLServerException: Connection reset by peer: socket write error”
  • 如何在spring application config中声明datasource?

标签: java spring spring-mvc jdbc jdbctemplate


【解决方案1】:

这有点像过时的连接问题。如果它很常见或第一个被执行(大部分时间),它可能仅在此查询中显示。

检查事项:

  • 服务器端连接超时
  • 连接池最小空闲超时
  • 连接池使用前验证连接

【讨论】:

  • 所以可能是下降的请求从池中获得了一个陈旧的连接。你用的是什么连接池?
  • 我使用 org.apache.commons.dbcp.BasicDataSource 作为我的 dao 的数据源。我没有设置任何池参数...
  • @davioooh 将参数 validationQuery 添加到您的数据源,如下所示:&lt;property name="validationQuery" value="select 1 as res"/&gt;
  • @user1516873 有没有办法也设置连接超时?
  • @davioooh 我认为你应该创建新问题,而不是破坏这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-13
  • 2014-02-08
  • 2012-09-09
  • 2017-01-26
  • 1970-01-01
  • 2012-06-03
相关资源
最近更新 更多