使用Spring JDBC模板的连接异常

dav*_*ooh 5 java spring jdbc spring-mvc jdbctemplate

我有一个使用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)
Run Code Online (Sandbox Code Playgroud)

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

我不明白是什么导致了这个问题。任何的想法?

执行查询的方法是:

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

其中BASE_QUERY是在异常消息是相同的。

Gar*_*vis 3

它有点像陈旧的连接问题。如果它很常见或第一个被执行(大多数情况下),它可能仅显示在此查询中。

需要检查的事项:

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

  • @davioooh 将参数validationQuery添加到您的数据源中,如下所示:`&lt;property name =“validationQuery”value =“select 1 as res”/&gt;` (3认同)