我正在尝试从 Spring Boot API 对 Databricks 执行 SELECT 查询。我已经使用 Databricks 作为数据源初始化了 javax.sql.DataSource 并使用了executeQuery() 方法来运行查询。
该服务在我当地的环境中运行良好。但是,当我将其部署到AWS ECS并使用Postman调用API时,遇到以下错误:
org.springframework.web.context.request.async.AsyncRequestNotUsableException: ServletOutputStream failed to write: java.io.IOException: Broken pipe
at org.springframework.web.context.request.async.StandardServletAsyncWebRequest$LifecycleHttpServletResponse.handleIOException(StandardServletAsyncWebRequest.java:343)
at org.springframework.web.context.request.async.StandardServletAsyncWebRequest$LifecycleServletOutputStream.write(StandardServletAsyncWebRequest.java:401) at org.springframework.util.StreamUtils$NonClosingOutputStream.write(StreamUtils.java:261)
at com.fasterxml.jackson.core.json.UTF8JsonGenerator._flushBuffer(UTF8JsonGenerator.java:2210)
at com.fasterxml.jackson.core.json.UTF8JsonGenerator.writeFieldName(UTF8JsonGenerator.java:247) ......
Caused by: org.apache.catalina.connector.ClientAbortException: java.io.IOException: Broken pipe
at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:341)
at org.apache.catalina.connector.OutputBuffer.flushByteBuffer(OutputBuffer.java:776)
at org.apache.catalina.connector.OutputBuffer.append(OutputBuffer.java:673)
at org.apache.catalina.connector.OutputBuffer.writeBytes(OutputBuffer.java:376)
at org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:354)
at org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:103)
此错误不会在本地发生,只有当服务部署在 AWS ECS 上时才会发生。
到目前为止我尝试过的:
请仔细阅读提到的... 1.增加客户端(Postman)和 Spring Boot 应用程序的超时。 2.检查ECS和Databricks配置,确保没有网络超时或限制。 3.检查异步请求设置并增加长时间运行查询的超时。 4.确保优化查询以减少执行时间。