Отсутствует компонент AmazonS3Client при обновлении SpringCloud Finchley до RELEASE - PullRequest
0 голосов
/ 26 июня 2018

Я недавно обновил свой проект SpringCloud с Brixton до Finchley, и все работало просто отлично.Я работал над Finchley.SR2, и у меня не было проблем, но всякий раз, когда я обновляю свой проект до Finchley.RELEASE (и это единственное изменение, которое я делаю), проект не запускается.

Причина в том, чтоПроект найти AmazonS3Client Bean:

...Unsatisfied dependency expressed through constructor parameter 0; 
nested exception is 
  org.springframework.beans.factory.NoSuchBeanDefinitionException: 
    No qualifying bean of type 'com.amazonaws.services.s3.AmazonS3Client' available: 
      expected at least 1 bean which qualifies as autowire candidate. 
        Dependency annotations: {}

Это мои предыдущие соответствующие конфигурации и классы:

build.gradle

buildscript {
    ext {
        springBootVersion = '2.0.2.RELEASE'
    }

    ...

    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
        classpath('io.spring.gradle:dependency-management-plugin:1.0.5.RELEASE')
    }
}

apply plugin: 'java'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'

dependencyManagement {
    imports {
        mavenBom "org.springframework.cloud:spring-cloud-dependencies:Finchley.SR2"
    }
}

dependencies {
    ...
    compile('org.springframework.boot:spring-boot-starter-web')
    compile('org.springframework.cloud:spring-cloud-starter-aws')
    compile('org.springframework.cloud:spring-cloud-starter-config'
    ...
}

...

S3Config.java (Класс, создающий компонент AmazonS3 / AmazonS3Client)

...

@Configuration
public class S3Config {

    @Bean
    public AmazonS3 amazonS3() {
        return AmazonS3ClientBuilder.standard()
                .withCredentials(new DefaultAWSCredentialsProviderChain())
                .build();
    }
}

StorageService (класс, который не может найти компонент)

...

@Service
public class StorageService {

    private final AmazonS3Client amazonS3Client;

    @Autowired
    public StorageService(AmazonS3Client amazonS3Client) {
        this.amazonS3Client = amazonS3Client;
    }

    ...
}

И это единственное изменение, которое я делаю в файле build.gradle при обновлении до Finchley. Выпуск:

dependencyManagement {
    imports {
        mavenBom "org.springframework.cloud:spring-cloud-dependencies:Finchley.RELEASE"
    }
}

Я пытался найти все пропавшиебиблиотеки и настройки всех конфигураций, которые я могу найти, но, похоже, ни одна из них не дает никакого эффекта.

1 Ответ

0 голосов
/ 04 июля 2018

После короткого разговора с сопровождающими Spring, было найдено решение .

Кажется, я ошибался, предполагая, что Бин AmazonS3 всегда должен быть найден какAmazonS3Client Бин только потому, что один реализует другой.Это была просто удача, что он работал в предыдущих версиях Spring.

Правильный способ создания AmazonS3Client был бы следующим:

@Configuration
public class S3Config {

    @Bean
    public static AmazonS3Client amazonS3Client() {
        return (AmazonS3Client) AmazonS3ClientBuilder.standard()
                .withCredentials(new DefaultAWSCredentialsProviderChain())
                .build();
    }
}
...