Пользовательский AmazonS3Client для ResourceLoader с Spring Cloud - PullRequest
0 голосов
/ 14 января 2020

Поскольку Spring Cloud AWS не предоставляет переменную конфигурации для использования настраиваемой конечной точки (в настоящее время я использую DigitalOcean Spaces в качестве службы S3), я зарегистрировал компонент AmazonS3 в своем классе конфигурации следующим образом:

@Configuration
public class ResourceLoaderConfiguration {

  private @Value("${cloud.aws.endpoint}") String endpoint;

  @Bean
  public AmazonS3Client amazonS3Client(AWSCredentialsProvider credentialsProvider,
        RegionProvider regionProvider) {

    EndpointConfiguration endpointConfiguration = new EndpointConfiguration(
            endpoint, regionProvider.getRegion().getName());

    return (AmazonS3Client) AmazonS3ClientBuilder.standard()
                                .withCredentials(credentialsProvider)
                                .withEndpointConfiguration(endpointConfiguration)
                                .build();
  }

Но по какой-то причине этот bean-компонент не будет учитываться для загрузчика ресурсов, поэтому, когда я пытаюсь получить такой объект:

resourceLoader.getResource("s3://" + bucket + "/" + key);

, я получаю исключение:

AmazonS3Exception: The AWS Access Key Id you provided does not exist in our records. (Service: Amazon S3; Status Code: 403; Error Code: InvalidAccessKeyId;

Есть ли способ связать мою пользовательскую реализацию клиента с загрузчиком ресурсов?

Кроме того, когда я пытаюсь автоматически подключить bean-компонент AmazonS3Client, я получаю сообщение об ошибке, поскольку найдено 2 экземпляра:

Field s3Client in com.webapp.services.storage.S3StorageService required a single bean, but 2 were found:
- amazonS3Client: defined by method 'amazonS3Client' in class path resource [com/webapp/config/ResourceLoaderConfiguration.class]
- amazonS3: defined in null
...