Поскольку 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