Java 如何在使用出站网关上载文件之前检查aws s3 bucket是否可用

Java 如何在使用出站网关上载文件之前检查aws s3 bucket是否可用,java,spring,amazon-s3,spring-integration,spring-integration-aws,Java,Spring,Amazon S3,Spring Integration,Spring Integration Aws,在spring boot应用程序中使用aws s3出站适配器,尝试在s3 bucket中上载文件。在上传文件之前,要检查bucket是否可用。如果铲斗不可用,则需要抛出错误 我建议你这样做 <int-aws:s3-outbound-gateway id="FileChannelS3" request-channel="filesOutS3CChainChannel" reply-channel="filesArcChannel" transf

在spring boot应用程序中使用aws s3出站适配器,尝试在s3 bucket中上载文件。在上传文件之前,要检查bucket是否可用。如果铲斗不可用,则需要抛出错误

我建议你这样做

<int-aws:s3-outbound-gateway id="FileChannelS3"
        request-channel="filesOutS3CChainChannel"
        reply-channel="filesArcChannel"
        transfer-manager="transferManager"
        bucket-expression="headers.TARGET_BUCKET"
                command="UPLOAD">
        <int-aws:request-handler-advice-chain>
            <ref bean="retryAdvice" />          
        </int-aws:request-handler-advice-chain>
    </int-aws:s3-outbound-gateway>

您可以配置
S3RemoteFileTemplate
bean,并在
中使用其
exists()
API:


其中,
amazonS3
com.amazonaws.services.s3.amazonS3
客户端的bean。

只需要一些说明。我在ec2实例中运行这个应用程序,它作为与S3 bucket的直接连接。我的应用程序中没有用于在S3 bucket中上载文件的凭据。直接使用出站适配器上载文件。。这个S3RemoteFileTemplate会工作吗。如果我不提供任何会话工厂详细信息?您能否建议如何检查此场景。请参阅
S3SessionFactory
:它基于
AmazonS3Client
。您可以在那里使用TransferManager所做的一切:
new AmazonS3Client(new DefaultAWSCredentialsProviderChain()
实现了解决方案。下面是异常java.lang.IllegalStateException:“path”必须在模式[BUCKET/KEY]中。你能对此提出建议吗。请看我的答案中的更新。它正在工作。需要一些建议。如果bucket不可用,是否可以执行任何重试机制三次…就像我们在春季重试时所做的那样。
<bean id="s3RemoteFileTemplate" class="org.springframework.integration.aws.support.S3RemoteFileTemplate">
    <constructor-arg ref="s3SessionFactory"/>
</bean>

<int:filter expression="@s3RemoteFileTemplate.exists(headers.TARGET_BUCKET)" throw-exception-on-rejection="true"/>
<int:filter expression="@amazonS3.doesBucketExistV2(headers.TARGET_BUCKET)" throw-exception-on-rejection="true"/>