Я работаю над микросервисным приложением, использующим Spring Boot 2.1.1 и Java 8. База данных, используемая в этом, - AWS DynamoDB.Я получаю следующую ошибку при запуске приложения: -
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userProfileJpaRepository': Could not resolve matching constructor (hint: specify index/type/name arguments for simple parameters to avoid type ambiguities)
Полный журнал ошибок: -
Ошибка запуска ApplicationContext.Чтобы отобразить отчет об условиях, перезапустите приложение с включенной отладкой.2019-03-15 15: 01: 01.148 ОШИБКА 20204 --- [main] osboot.SpringApplication: сбой запуска приложения
org.springframework.beans.factory.UnsatisfiedDependencyException: ошибка при создании компонента с именем 'methodValidationPostProcessor' определенав ресурсе пути к классу [org / springframework / boot / autoconfigure / validation / ValidationAutoConfiguration.class]: неудовлетворенная зависимость выражается через метод 'methodValidationPostProcessor', параметр 0;Вложенное исключение - org.springframework.beans.factory.BeanCreationException: Ошибка создания бина с именем 'userProfileJpaRepository': не удалось разрешить соответствующий конструктор (подсказка: укажите аргументы index / type / name для простых параметров, чтобы избежать неоднозначностей типов) в org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray (ConstructorResolver.java:769) ~ [spring-beans-5.1.3.RELEASE.jar: 5.1.3.RELEASE] в org.springframework.beans.factory.support.ConstructorResolverhoactFactoryMaster(ConstructorResolver.java:509) ~ [spring-beans-5.1.3.RELEASE.jar: 5.1.3.RELEASE] в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethow:aFableFable.able.able.able.able.able.able.able.able.able.able.able.able.able.BF ()spring-beans-5.1.3.RELEASE.jar: 5.1.3.RELEASE] в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance (AbstractAutowireCapableBeanFactory.java:1ELE [spring.be.3] spring.REG.ref.seans-spring.rease.se.3..jar: 5.1.3.RELEASE] вorg.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean (AbstractAutowireCapableBeanFactory.java:538) ~ [spring-beans-5.1.3.RELEASE.jar: 5.1.3.RELEansfraserf.AbstractAutowireCapableBeanFactory.createBean (AbstractAutowireCapableBeanFactory.java:498) ~ [spring-beans-5.1.3.RELEASE.jar: 5.1.3.RELEASE] в org.springframework.beans.actoryFactBFBB.java: 320) ~ [spring-beans-5.1.3.RELEASE.jar: 5.1.3.RELEASE] в org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton (DefaultSingletonBeanRegistry.java:222) ~ [spring-beans-5.1.3.RELEASE.jar: 5.1.3.RELEASE] в org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean (AbstractBeanFactory.java:318) ~ [spring-beans-5.1.3.RELEASE.jar: 5.1.3.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean (AbstractBeanFactory.java:204) ~ [spring-beans-5.1.3.RELEASE.jar: 5.1.3.RELEASE] at org.springframework.context.support.PostProcessorRegistrationDelegate.registerBeanPostProcessors (PostProcessorRegistrationDelegate.java:228) ~ [spring-context-5.1.3.RELEASE.jar: 5.1.3.RELEASE] в org.ssuxt.traf.AbstractApplicationContext.registerBeanPostProcessors (AbstractApplicationContext.java:707) ~ [spring-context-5.1.3.RELEASE.jar: 5.1.3.RELEASE] в org.springframework.context.support.AbstractApplicationContext.refresh (AbstractApplication:5)[spring-context-5.1.3.RELEASE.jar: 5.1.3.RELEASE] в org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh (ServletWebServerApplicationContext.java:142) ~ [spring-boot-2.1.1.RELEASE.jar: 2.1.1.RELEASE] at org.springframework.boot.SpringApplication.refresh (SpringApplication.java:775) [spring-boot-2.1.1.RELEASE.jar: 2.1.1.RELEASE]в org.springframework.boot.SpringApplication.refreshContext (SpringApplication.java:397) [spring-boot-2.1.1.RELEASE.jar: 2.1.1.RELEASE]
в org.springframework.boot.SpringApplication.run (SpringApplication.java:316) [spring-boot-2.1.1.RELEASE.jar: 2.1.1.RELEASE]
в org.springframework.boot.SpringApplication.run (SpringApplication.java:1260) [spring-boot-2.1.1.RELEASE.jar: 2.1.1.RELEASE]
в org.springframework.boot.SpringApplication.run (SpringApplication.java:1248) [spring-boot-2.1.1.RELEASE.jar: 2.1.1.RELEASE]
на com.user.profile.UserProfileApplication.main (UserProfileApplication.java:14) [classes /: na]
Вызвано: org.springframework.beans.factory.BeanCreationException: Ошибка создания бина с именем 'userProfileJpaRepository': не удалось разрешить соответствующий конструктор (подсказка: укажите аргументы index / type / name для простых параметров, чтобы избежать неоднозначностей типов)
в org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor (ConstructorResolver.java:268) ~ [spring-beans-5.1.3.RELEASE.jar: 5.1.3.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor (AbstractAutowireCapableBeanFactory.java:1308) ~ [spring-beans-5.1.3.RELEASE.jar: 5.1.3.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance (AbstractAutowireCapableBeanFactory.java:1154) ~ [spring-beans-5.1.3.RELEASE.jar: 5.1.3.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.getSingletonFactoryBeanForTypeCheck (AbstractAutowireCapableBeanFactory.java:974) ~ [spring-beans-5.1.3.RELEASE.ELE 5.1.EAR:
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.getTypeForFactoryBean (AbstractAutowireCapableBeanFactory.java:848) ~ [spring-beans-5.1.3.RELEASE.jar: 5.1.3] RELE
в org.springframework.beans.factory.support.AbstractBeanFactory.isTypeMatch (AbstractBeanFactory.java:574) ~ [spring-beans-5.1.3.RELEASE.jar: 5.1.3.RELEASE]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doGetBeanNamesForType (DefaultListableBeanFactory.java:514) ~ [spring-beans-5.1.3.RELEASE.jar: 5.1.3.RELEASE]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanNamesForType (DefaultListableBeanFactory.java:477) ~ [spring-beans-5.1.3.RELEASE.jar: 5.1.3.RELEASE]
в org.springframework.beans.factory.BeanFactoryUtils.beanNamesForTypeInclusionAncestors (BeanFactoryUtils.java:227) ~ [spring-beans-5.1.3.RELEASE.jar: 5.1.3.RELEASE]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates (DefaultListableBeanFactory.java:1401) ~ [spring-beans-5.1.3.RELEASE.jar: 5.1.3.RELEASE]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency (DefaultListableBeanFactory.java:1200) ~ [spring-beans-5.1.3.RELEASE.jar: 5.1.3.RELEASE]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency (DefaultListableBeanFactory.java:1164) ~ [spring-beans-5.1.3.RELEASE.jar: 5.1.3.RELEASE]
в org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument (ConstructorResolver.java:857) ~ [spring-beans-5.1.3.RELEASE.jar: 5.1.3.RELEASE]
в org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray (ConstructorResolver.java:760) ~ [spring-beans-5.1.3.RELEASE.jar: 5.1.3.RELEASE]
... 19 общих кадров пропущено
Процесс завершен с кодом выхода 1
Файл основного класса: -
package com.user.profile;
import org.socialsignin.spring.data.dynamodb.repository.config.EnableDynamoDBRepositories;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
@SpringBootApplication
@ComponentScan("com.user.profile.jpa") //to scan packages mentioned
@EnableDynamoDBRepositories(basePackages = "com.user.profile.jpa")
public class UserProfileApplication {
public static void main(String[] args) {
SpringApplication.run(UserProfileApplication.class, args);
}
}
pom.xml: -
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.user.profile</groupId>
<artifactId>user-profile</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>user-profile</name>
<description>User Profile</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.4</version>
<scope>provided</scope>
</dependency>
<!-- Amazon DynamoDB -->
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-dynamodb</artifactId>
<version>1.11.470</version>
</dependency>
<!-- Community module for DynamoDB -->
<dependency>
<groupId>com.github.derjust</groupId>
<artifactId>spring-data-dynamodb</artifactId>
<version>4.3.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
<finalName>docker-spring-boot</finalName>
</build>
<repositories>
<repository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/snapshot</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/snapshot</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
<pluginRepository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
</pluginRepository>
</pluginRepositories>
</project>
файл application.properties: -
amazon.dynamodb.endpoint=http://localhost:8000/
amazon.aws.accesskey=HSGHAD768242
amazon.aws.secretkey=ghjgh677238hjhjhHJJHADU8977JKHKJ
amazon.dynamodb.region="us-west-2"
spring.main.allow-bean-definition-overriding=true
#spring.profiles.active=dev
server.port=8090
Репозиторий JPA: -
package com.user.profile.jpa;
import com.user.profile.model.UserProfileModel;
import org.socialsignin.spring.data.dynamodb.repository.EnableScan;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
@EnableScan
public interface UserProfileJpaRepository extends CrudRepository<UserProfileModel, Integer> {
}
Класс конфигурации DynamoDB: -
package com.user.profile.jpa;
import com.amazonaws.client.builder.AwsClientBuilder;
import com.amazonaws.services.dynamodbv2.AmazonDynamoDB;
import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClientBuilder;
import com.amazonaws.services.dynamodbv2.document.DynamoDB;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapperConfig;
import org.socialsignin.spring.data.dynamodb.repository.config.EnableDynamoDBRepositories;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
@Configuration
@EnableDynamoDBRepositories(basePackages = "com.user.profile.jpa")
public class DynamoDbConfig {
@Value("${amazon.dynamodb.endpoint}")
private String dynamoDbEndPoint;
@Value("${amazon.aws.accesskey}")
private String accessKey;
@Value("${amazon.aws.secretkey}")
private String secretAccessKey;
@Value("${amazon.dynamodb.region}")
private String dynamoDBRegion;
@Bean
public DynamoDBMapperConfig dynamoDBMapperConfig() {
return DynamoDBMapperConfig.DEFAULT;
}
@Bean
public DynamoDBMapper dynamoDBMapper(AmazonDynamoDB amazonDynamoDB, DynamoDBMapperConfig config) {
return new DynamoDBMapper(amazonDynamoDB, config);
}
@Bean
public AmazonDynamoDB amazonDynamoDB() {
return AmazonDynamoDBClientBuilder
.standard()
.withEndpointConfiguration(
new AwsClientBuilder.EndpointConfiguration(dynamoDbEndPoint, dynamoDBRegion))
.build();
}
@Bean
public DynamoDB dynamoDB() {
return new DynamoDB(amazonDynamoDB());
}
}
Класс сущности: -
package com.user.profile.model;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBAttribute;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBAutoGeneratedKey;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBHashKey;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBTable;
import java.util.UUID;
@DynamoDBTable(tableName = "UserProfileModel")
public class UserProfileModel {
private UUID uuid;
private Integer userId;
private String firstName;
private String lastName;
private String gender;
private int age;
/* public UserProfileModel() {
}
public UserProfileModel(UUID uuid, int userId, String firstName, String lastName, String gender, int age) {
this.uuid = uuid;
this.userId = userId;
this.firstName = firstName;
this.lastName = lastName;
this.gender = gender;
this.age = age;
}*/
public UUID getUuid() {
return uuid;
}
public void setUuid(UUID uuid) {
this.uuid = uuid;
}
@DynamoDBHashKey
@DynamoDBAutoGeneratedKey
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
@DynamoDBAttribute
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
@DynamoDBAttribute
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
@DynamoDBAttribute
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
@DynamoDBAttribute
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "UserProfileModel{" +
"uuid=" + uuid +
", userId=" + userId +
'}';
}
}
Мне кажется, что-то не так с моей декларацией репозитория JPA.Я был бы очень признателен, если бы вы могли предложить основную причину этого.
Приветствия