Ошибка создания bean-компонента с именем «dynamodbClient»: не удалось разрешить метод поиска.

Ява: 20,0

Спрингбут: 3.0.1

Зависимость

      <dependency>
      <groupId>software.amazon.awssdk</groupId>
      <artifactId>aws-sdk-java</artifactId>
      <version>2.20.115</version>
      <scope>provided</scope>
 </dependency>

Класс обслуживания

      @Slf4j
@Service
public class DynamodbClient {

  private final DynamoDbClient dynamoDbClient;
  
  @Value("${amazon.aws.dynamodb.endpoint}")
  private String endpoint;

  @Value("${amazon.aws.dynamodb.region}")
  private String region;

  public DynamodbClient() {
    this.dynamoDbClient =
        DynamoDbClient.builder()
            .endpointOverride(URI.create(endpoint))
            .region(Region.of(region))
            .build();
  }
}

Примечание. Учетные данные для аутентификации не требуются. Dynamodb доступен через cli.

Контекст: для этого приложения основной базой данных является Cassandra, и фактическое требование должно быть реализовано через вызов API, но по какой-то причине мы этого не делаем, а вместо этого обновляем запись в dynamodb напрямую, и это выполняется время от времени.

1 ответ

КлассDynamodbClientдолжна иметь аннотацию вместо@Service. Чтобы правильно настроить определение компонента, вам придется использовать эту аннотацию. Кроме того, переменная экземпляраDynamoDbClientне требуется.

Окончательный код будет:

      @Configuration
public class DynamodbClient {
  
  @Value("${amazon.aws.dynamodb.endpoint}")
  private String endpoint;

  @Value("${amazon.aws.dynamodb.region}")
  private String region;

  public DynamodbClient() {
    this.dynamoDbClient =
        DynamoDbClient.builder()
            .endpointOverride(URI.create(endpoint))
            .region(Region.of(region))
            .build();
  }
}

@Configuration— это аннотация уровня класса, указывающая, что объект является источником определений компонента.

Более подробную информацию можно найти в документации Spring .

Другие вопросы по тегам