DynamoDB Spring JPA: компонент репозитория не найден, с Spring boot 3, Java 21

Я пытаюсь интегрироваться с DynamoDB, используя Spring boot 3.x. Я использую Java 21 и имею следующую конфигурацию в Gradle для DynamoDb:

dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'

implementation 'org.springframework.data:spring-data-commons:2.7.18'
implementation 'com.amazonaws:aws-java-sdk-dynamodb:1.12.714'
implementation 'com.github.derjust:spring-data-dynamodb:5.1.0'

implementation group: 'org.modelmapper', name: 'modelmapper', version: '2.1.1'
implementation 'org.springframework.boot:spring-boot-starter-hateoas'

compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}

DynamoDBConfig для bean-компонентов:

@EnableDynamoDBRepositories( includeFilters = @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, classes = Repository.class))
public class DynamoDBConfig {

  //  @Value("${amazon.dynamodb.endpoint}")
    private String amazonDynamoDBEndpoint = "http://localhost:8000/";

    //@Value("${amazon.aws.accesskey}")
    private String amazonAWSAccessKey = "key";

    //@Value("${amazon.aws.secretkey}")
    private String amazonAWSSecretKey  = "dfjkdkf";



   @Bean
    public AmazonDynamoDB amazonDynamoDB() {
        AmazonDynamoDB amazonDynamoDB
                = new AmazonDynamoDBClient(amazonAWSCredentials());

        if (!StringUtils.isEmpty(amazonDynamoDBEndpoint)) {
            amazonDynamoDB.setEndpoint(amazonDynamoDBEndpoint);
        }

        return amazonDynamoDB;
    }

    @Bean
    public AWSCredentials amazonAWSCredentials() {
        return new BasicAWSCredentials(
                amazonAWSAccessKey, amazonAWSSecretKey);
    }
}

Класс сущности:

@Data
@DynamoDBTable(tableName = "tenant")
public class Tenant {
    @DynamoDBHashKey
    private String id;
    @DynamoDBAttribute
    private String name;
    @DynamoDBAttribute
    private String country;
    @DynamoDBAttribute
    private Status status;
}

Репозиторий:

@EnableScan
@Repository
public interface TenantRepository extends CrudRepository<Tenant, String> {
}

Все эти классы являются частью базового пакета, в котором у меня есть класс Application.java. При запуске приложения получаю ошибку:

Рассмотрите возможность определения bean-компонента типа com.middleware.TenantRepository в ваша конфигурация

Мне не хватает какой-то конфигурации для DynamoDB с SPringBoot (JPA).

ОБНОВЛЕНИЕ К вопросу:

Обновлен AWS SDK до

implementation 'software.amazon.awssdk:bom:2.21.1'
implementation 'software.amazon.awssdk:dynamodb-enhanced:2.20.87'

Однако репозиторий JPA не найден. Совместим ли JPA с DynamoDB с новым SDK и Java 21? Какие методы рекомендуется использовать для подключения к DynamoDB и чтения/записи в него данных с помощью Spring boot 3.x, JPA и Java 21?

Я предполагаю, что ваш @EnableDynamoDBRepositories не находит TenantRepository, попробуйте вместо этого использовать поиск по пакетам: @EnableDynamoDBRepositories(basePackages = "com.foo.bar")

J Asgarov 10.07.2024 07:55

Это я уже пробовал, ошибку не меняет

Nitish Bhardwaj 10.07.2024 08:22

для чего твой импорт @Repository?

J Asgarov 10.07.2024 08:24
import org.springframework.stereotype.Repository;
Nitish Bhardwaj 10.07.2024 08:36

Я бы настоятельно не советовал использовать AWS Java SDK V1, особенно с Java 21.

Leeroy Hannigan 10.07.2024 09:57

@LeeroyHannigan Не могли бы вы предложить совместимый SDK для работы с DynamoDb с Java 21?

Nitish Bhardwaj 11.07.2024 14:19

@LeeroyHannigan Я переключил AWS JAVA SDK на следующий, но это не изменило ошибку. Невозможно найти репозиторий JPA: нет определения компонента. implementation 'software.amazon.awssdk:bom:2.21.1'implementation 'software.amazon.awssdk:dynamodb-enhanced:2.20.87'

Nitish Bhardwaj 11.07.2024 14:39
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
7
77
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Spring Data на данный момент не предлагает прямую интеграцию с AWS SDK v2 для взаимодействия с DynamoDB. Запасной вариант — использовать специальную реализацию для взаимодействия с DynamoDB. Вот несколько образцов:

https://medium.com/stepstone-tech/integration-testing-with-spring-boot-3-dynamodb-and-localstack-186e674b17be

https://docs.awspring.io/spring-cloud-aws/docs/3.0.0/reference/html/index.html#spring-cloud-aws-dynamoDb

Следуя этим рекомендациям, мы можем реализовать собственный уровень для любой операции CRUD в DynamoDB поверх SpringBoot 3, Java 21.

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