简体   繁体   English

Spring 启动连接 AWS java.net.ConnectException:连接被拒绝

[英]Spring boot connect AWS java.net.ConnectException: Connection refused

Our server need to use AWS S3 to store users images, our server is springboot,we will connect S3 to upload image, sometimes it raise exception:java.net.ConnectException: Connection refused, once the exception was raised, it will alway rasie utils we restart springboot service.我们的服务器需要使用AWS S3来存储用户图片,我们的服务器是springboot,我们会连接S3上传图片,有时会抛出异常:java.net.ConnectException: Connection refused,一旦抛出异常,它总是会rasie utils我们重启springboot服务。 It can work fine in some days (1 ~2) and then raise Connection refused它可以在某些天(1 ~ 2)内正常工作,然后引发 Connection refused

  String fileExt = fileName.substring(fileName.lastIndexOf(".") + 1);
  String contentType = WUtils.getContentType(fileExt);

  AwsBasicCredentials awsCreds = AwsBasicCredentials.create(
                    aws_access_key_id,
                    aws_secret_key);
            Region region = Region.AP_EAST_1;
            presigner = S3Presigner.builder()
                    .region(region)
                    .credentialsProvider(StaticCredentialsProvider.create(awsCreds))
                    .build();

            PutObjectRequest objectRequest = PutObjectRequest.builder()
                    .bucket(bucketName)
                    .key(bucketFolderName + "/" + fileName)
                    .contentType(contentType)
                    .build();

            PutObjectPresignRequest presignRequest = PutObjectPresignRequest.builder()
                    .signatureDuration(Duration.ofMinutes(10))
                    .putObjectRequest(objectRequest)
                    .build();

            PresignedPutObjectRequest presignedRequest = presigner.presignPutObject(presignRequest);

            // Upload content to the Amazon S3 bucket by using this URL.
            URL url = presignedRequest.url();

            // Create the connection and use it to upload the new object by using the presigned URL.
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setDoOutput(true);
            connection.setRequestProperty("Content-Type", contentType);
            connection.setRequestMethod("PUT");
            connection.getOutputStream().write(pic);
            int responseCode = connection.getResponseCode();
            if (responseCode == 200) {
                imagePath = url.toString().replace("?" + url.getQuery(), "");
                log.info("======Upload Image Url:" + imagePath);
            } else {
                log.error("======Upload Image fail, responseCode:" + responseCode);
            }
        } catch (Exception e) {
            log.error(String.format("Module:%s,Method:%s,Info:%s", "File Upload", "generatePresignedUrlUploadImage", e.getMessage()));
        } finally {
            if (presigner != null) {
                presigner.close();
            }
            return imagePath;
        }
 

java.net.ConnectException: Connection refused
    at java.base/sun.nio.ch.Net.connect0(Native Method)
    at java.base/sun.nio.ch.Net.connect(Net.java:579)
    at java.base/sun.nio.ch.Net.connect(Net.java:568)
    at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:588)
    at java.base/java.net.Socket.connect(Socket.java:633)
    at java.base/java.net.Socket.connect(Socket.java:583)
    at java.base/sun.net.NetworkClient.doConnect(NetworkClient.java:183)
    at java.base/sun.net.www.http.HttpClient.openServer(HttpClient.java:498)
    at java.base/sun.net.www.http.HttpClient$1.run(HttpClient.java:557)
    at java.base/sun.net.www.http.HttpClient$1.run(HttpClient.java:555)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:569)
    at java.base/sun.net.www.http.HttpClient.privilegedOpenServer(HttpClient.java:554)
    at java.base/sun.net.www.http.HttpClient.openServer(HttpClient.java:598)
    at java.base/sun.net.www.protocol.https.HttpsClient.<init>(HttpsClient.java:266)
    at java.base/sun.net.www.protocol.https.HttpsClient.New(HttpsClient.java:380)
    at java.base/sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(AbstractDelegateHttpsURLConnection.java:198)
    at java.base/sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1263)
    at java.base/sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1128)
    at java.base/sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:175)
    at java.base/sun.net.www.protocol.http.HttpURLConnection.getOutputStream0(HttpURLConnection.java:1430)
    at java.base/sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1401)
    at java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:220)
    at com.wealth.api.service.AmazonService.generatePresignedUrlUploadImage(AmazonService.java:357)
    at com.wealth.api.service.AmazonService$$FastClassBySpringCGLIB$$23d39f70.invoke(<generated>)
    at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
    at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:688)
    at com.wealth.api.service.AmazonService$$EnhancerBySpringCGLIB$$58fed417.generatePresignedUrlUploadImage(<generated>)
    at com.wealth.api.controller.CommControl.uploadFile(CommControl.java:294)
    at jdk.internal.reflect.GeneratedMethodAccessor943.invoke(Unknown Source)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:568)
    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150)
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1060)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:962)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:652)
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327)
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115)
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)
    at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:122)
    at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:116)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)
    at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126)
    at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)
    at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:109)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)
    at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)
    at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)
    at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103)
    at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)
    at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90)
    at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)
    at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110)
    at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)
    at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)
    at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211)
    at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183)
    at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:354)
    at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
    at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
    at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1707)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.base/java.lang.Thread.run(Thread.java:833)

AWS support can not resolve this issue,it suggests retry... but once the exception was raised, retry will be useless util we restart springboot. AWS支持无法解决这个问题,它建议重试...但是一旦引发异常,重试将无用,我们重新启动springboot。

=========================================================== AWS support had captured the.network packets, no issues were found. ================================================ ========= AWS 支持已经捕获了.network 数据包,没有发现任何问题。

If you are using a Spring BOOT app to upload assets to an Amazon S3 bucket, look at using the S3Client object's putObject method as opposed S3Presigner .如果您使用Spring BOOT 应用程序将资产上传到 Amazon S3 存储桶,请查看使用S3Client对象的putObject方法而不是S3Presigner

S3Presigner is for apps without requiring authentication. S3Presigner适用于不需要身份验证的应用程序。 Your Spring BOOT app has access to creds (shown in your code).您的 Spring BOOT 应用程序可以访问信用(显示在您的代码中)。

More information about this subject here:有关此主题的更多信息,请访问:

Working with Amazon S3 presigned URLs 使用 Amazon S3 预签名 URL

Another newer way when using the AWS SDK for Java V2 is to use Transfer Manager for accelerated file transfers.AWS SDK 用于 Java V2的另一种更新方法是使用传输管理器来加速文件传输。 A Java code example is shown here:此处显示了一个 Java 代码示例:

https://github.com/awsdocs/aws-doc-sdk-examples/blob/main/javav2/example_code/s3/src/main/java/com/example/s3/transfermanager/UploadObject.java https://github.com/awsdocs/aws-doc-sdk-examples/blob/main/javav2/example_code/s3/src/main/java/com/example/s3/transfermanager/UploadObject.java

I had uploaded the image using S3Client, but the code can not work, It can upload image successfully but the program was hold in "upload.completionFuture().join();"我已经使用 S3Client 上传了图片,但代码无法运行,它可以成功上传图片,但程序在“upload.completionFuture().join();”中暂停。 method ...方法...

String imagePath = "";
    S3TransferManager transferManager = null;
        String fileExt = fileName.substring(fileName.lastIndexOf(".") + 1);
        String contentType = WUtils.getContentType(fileExt);

        AwsBasicCredentials awsCreds = AwsBasicCredentials.create(
                aws_access_key_id_for_upload_image,
                aws_secret_key_for_upload_image);
        Region region = Region.AP_EAST_1;
        transferManager = S3TransferManager.builder()
                .s3ClientConfiguration(cfg ->cfg.region(region)             .credentialsProvider(StaticCredentialsProvider.create(awsCreds))
                        .targetThroughputInGbps(20.0)
                        .minimumPartSizeInBytes(10 * 1024L))
                .build();

        File file = new File(fileName);
        FileUtils.copyInputStreamToFile(w_file.getInputStream(), file);

        log.info("======upload image begin,{}", fileName);
        FileUpload upload =
                transferManager.uploadFile(u -> u.source(file)
                        .putObjectRequest(p -> p.bucket(bucketName).key(bucketFolderName + "/" + fileName)));
        
        // upload...
        upload.completionFuture().join();//<---Hold ....
       

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 AWS RDS 的 Terraform Postgresql 提供程序错误:“拨号 tcp 127.0.0.1:5432:连接:连接被拒绝” - Terraform Postgresql provider error for AWS RDS: "dial tcp 127.0.0.1:5432: connect: connection refused" Django; 44 connect() 在连接到 AWS Elastic Bean 上的上游时失败(111:连接被拒绝) - Django; 44 connect() failed (111: Connection refused) while connecting to upstream on AWS Elastic Bean AWS EC2 实例连接在浏览器中被拒绝 - AWS EC2 Instance Connection Refused in browser 如何在没有 aws acceskey 和 secretkey 的情况下使用 spring 启动应用程序连接 aws secret manager - how to connect aws secret manager using spring boot application without aws acceskey and secretkey Spring Boot、React 和 OpenId Connect - Spring Boot, React and OpenId Connect 我们可以使用 java 和 spring 通过 API 引导从 AWS EFS 上传和下载文件吗? - Can we upload and download files from AWS EFS using java and spring boot through an API? 如何使用 AWS IAM 身份验证从 Java/Spring 应用程序连接到 AWS RDS MySQL? - How do I connect to AWS RDS MySQL from Java/Spring application using AWS IAM Authentication? 使用 ssh 隧道从 Java jdbc 连接到 aws 远程 Postgres,面临连接超时,而 JsCH session.connect() 运行成功 - Connect to aws remote Postgres from Java jdbc with ssh tunnel, Facing connection timeout, while JsCH session.connect() ran successful 主机 spring 启动 api 使用 aws lambda - Host spring boot api using aws lambda 哪个 Spring Cloud AWS 版本应该与 Spring Boot 3 一起使用? - Which Spring Cloud AWS version should be used with Spring Boot 3?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM