[英]Spring Cloud AWS code not finding S3 File
I do not understand why the Spring AWS Cloud code is not finding my S3 file. 我不明白为什么Spring AWS Cloud代码没有找到我的S3文件。 I have the 'aws-context:context-resource-loader' in my spring bean xml configuration.
我的spring bean xml配置中有'aws-context:context-resource-loader'。 I would have thought the 's3:' resource usage would be seamless like spring the 'classpath:' resource is easy to use.
我本以为's3:'资源的使用就像春天一样无缝'classpath:'资源很容易使用。
I know that the AWS permissions and credentials are configured correctly because I can retrieve the file in question if I use the AmazonS3Client directly. 我知道AWS权限和凭据配置正确,因为如果我直接使用AmazonS3Client,我可以检索有问题的文件。
From the Spring side the AWS credentials should be found automatically. 从Spring 端开始 ,应自动找到AWS凭据。
Here is the working Amazon S3 Client code: 这是有效的Amazon S3客户端代码:
public static void main(String [] args) throws IOException {
AmazonS3 s3Client = new AmazonS3Client(new DefaultAWSCredentialsProviderChain());
System.out.println(s3Client.doesObjectExist("MyBucket", "sample/resource.txt"));
S3Object object = s3Client.getObject(new GetObjectRequest("MyBucket", "sample/resource.txt"));
String result = StreamUtils.copyToString(object.getObjectContent(), Charset.forName("UTF-8"));
System.out.println(result);
}
Here is the Spring Cloud AWS equivalent that is not finding the same S3 file: 以下是未找到相同S3文件的Spring Cloud AWS等效项:
public class App {
public static void main(String[] args) throws IOException {
final AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext("app-context.xml");
ctx.scan("bdf.sample.spring");
S3Resource s3Resource = ctx.getBean("S3Resource", S3Resource.class);
InputStream resource = s3Resource.getResource("s3://MyBucket/sample/resource.txt");
String result = StreamUtils.copyToString(resource, Charset.forName("UTF-8"));
System.out.println(result);
}
}
I have a System.out.println in the S3Resource constructor that shows this ResourceLoader: 我在S3Resource构造函数中有一个显示此ResourceLoader的System.out.println:
org.springframework.context.annotation.AnnotationConfigApplicationContext
org.springframework.context.annotation.AnnotationConfigApplicationContext
The Exception I get is: 我得到的例外是:
Exception in thread "main" java.io.FileNotFoundException: class path resource [s3://MyBucket/sample/resource.txt] cannot be opened because it does not exist
线程“main”java.io.FileNotFoundException中的异常:无法打开类路径资源[s3://MyBucket/sample/resource.txt],因为它不存在
The S3Resource: S3Resource:
package bdf.sample.spring;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
import org.springframework.stereotype.Service;
import java.io.IOException;
import java.io.InputStream;
@Service("S3Resource")
public class S3Resource {
private final ResourceLoader resourceLoader;
@Autowired
public S3Resource(ResourceLoader resourceLoader) {
this.resourceLoader = resourceLoader;
System.out.println(resourceLoader.getClass());
}
public InputStream getResource(String path) throws IOException {
final Resource resource = resourceLoader.getResource(path);
return resource.getInputStream();
}
}
And finally my Spring XML 最后是我的Spring XML
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aws-context="http://www.springframework.org/schema/cloud/aws/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/cloud/aws/context
http://www.springframework.org/schema/cloud/spring-cloud-aws-context.xsd">
<aws-context:context-resource-loader/>
<aws-context:context-region region="us-east-1"/>
</beans>
github link with esentially the same code: https://github.com/BDF/SpringCloudSample github链接与实际上相同的代码: https : //github.com/BDF/SpringCloudSample
一个问题是ResoureLoader对S3的支持不是读取region属性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.