Spring Cloud AWS - 使用ResourceLoader为S3提供静态内容

时间:2016-08-25 00:46:44

标签: spring-boot spring-cloud spring-cloud-aws

我知道spring-cloud-aws提供SimpleStorageResourceLoader来允许从S3加载资源,并使用s3://<bucket>/<key>等路径模式。我遇到的问题是如何确保在解析mvc组件中的静态资源时ResourceLoader被使用。以下是我对资源映射的配置:

@Configuration
public class TestWebConfigurer extends WebMvcConfigurerAdapter {
    private String s3Location;

    // ${test.s3.location} comes in as "s3://<bucket>/"   
    public TestWebConfigurer(@Value("${test.s3.location}") String s3Location) {
        this.s3Location = s3Location;
    }

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/mytest/**").addResourceLocations(s3Location);
    }
}

当我单步执行addResourceLocations()中的代码时,会有resourceLoader.getResource(location)的电话。不幸的是,最终只是DefaultResourceLocator,当Resource返回时,它最终成为路径为ServletContextResource的{​​{1}}。

我已经在我的application.yml文件中配置了我的aws凭据:

/s3://<bucket>/

我没有做任何特殊的自动装配或启动任何特定于AWS的bean,因为我的理解是spring-cloud-starter-aws会在Spring Boot的上下文中为我做这件事。

我能够在同一个项目中创建cloud: aws: credentials: accessKey: <myaccess> secretKey: <mysecret> region: static: us-east-1 来测试我的AWS连接是否正确。这是测试:

ApplicationRunner

此测试能够在应用程序启动时输出@Component public class TestSimpleStorageLoader implements ApplicationRunner { private ResourceLoader loader; public TestSimpleStorageLoader(ResourceLoader loader) { this.loader = loader; } @Override public void run(ApplicationArguments args) throws Exception { Resource resource = this.loader.getResource("s3://<bucket>/test.txt"); IOUtils.copy(resource.getInputStream(), System.out); } } 文件的内容。

为了让资源处理程序能够运行,我缺少什么?

0 个答案:

没有答案