2012-11-21 53 views
4

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

检索数据我使用由框架提供的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是在异常消息是相同的。

+0

错误的相关部分是前连接:“SQLServerException :通过peer重置连接:套接字写入错误“ – NimChimpsky

+0

如何在spring应用程序配置中声明datasourse? – user1516873

回答

3

它有点像一个陈旧的连接问题的气味。它可能只在这个查询中出现,如果它很常见或者第一个被执行(大部分时间)。

检查事项:

  • 服务器端连接超时
  • 连接池铅丹空闲超时
  • 连接池校验使用
+0

它实际上是执行的第一个查询... – davioooh

+1

所以它可能是下降的请求正在从池中得到一个陈旧的连接。你在使用什么连接池? –

+0

我使用'org.apache.commons.dbcp.BasicDataSource'作为我的dao的数据源。我没有设置任何池参数... – davioooh