Я пытаюсь интегрироваться с 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?
Это я уже пробовал, ошибку не меняет
для чего твой импорт @Repository
?
import org.springframework.stereotype.Repository;
Я бы настоятельно не советовал использовать AWS Java SDK V1, особенно с Java 21.
@LeeroyHannigan Не могли бы вы предложить совместимый SDK для работы с DynamoDb с Java 21?
@LeeroyHannigan Я переключил AWS JAVA SDK на следующий, но это не изменило ошибку. Невозможно найти репозиторий JPA: нет определения компонента. implementation 'software.amazon.awssdk:bom:2.21.1'
implementation 'software.amazon.awssdk:dynamodb-enhanced:2.20.87'
Spring Data на данный момент не предлагает прямую интеграцию с AWS SDK v2 для взаимодействия с DynamoDB. Запасной вариант — использовать специальную реализацию для взаимодействия с DynamoDB. Вот несколько образцов:
Следуя этим рекомендациям, мы можем реализовать собственный уровень для любой операции CRUD в DynamoDB поверх SpringBoot 3, Java 21.
Я предполагаю, что ваш
@EnableDynamoDBRepositories
не находитTenantRepository
, попробуйте вместо этого использовать поиск по пакетам:@EnableDynamoDBRepositories(basePackages = "com.foo.bar")