[SPRING] 봄 부팅 - BeanDefinitionOverrideException : 잘못된 Bean 정의
SPRING봄 부팅 - BeanDefinitionOverrideException : 잘못된 Bean 정의
스프링 부트로 DynamoDB를 로컬로 설치하려고합니다. 처음에는 설치가 작동하고 저장소를 통해 DynamoDB에 쓰고 저장할 수있었습니다. 그 시점에서 필자는 더 많은 클래스를 추가하여 응용 프로그램을 빌드했습니다. 이제 응용 프로그램을 시작하려고하면 다음과 같은 예외가 발생합니다.
저는 SO와 인터넷을 광범위하게 검색했지만 이것에 대한 유용한 해결책은 없었습니다. 오류 메시지는 오도 된 것입니다.
내 프로젝트는 다음 계층 구조입니다.
ai.test.as
- as
- agent
- business
- intent
- exception
- Agent.java
- AgentDTO.java
- AgentRespository.java
- AgentController.java
- AgentService.java
- AgentServiceImpl.java
- config
- DynamoDBConfig.java
DynamoDBConfig.java
package ai.test.as.config;
import ai.test.as.agent.AgentRepository;
import ai.test.as.agent.intent.template.TemplateRepository;
import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.services.dynamodbv2.AmazonDynamoDB;
import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient;
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;
@Configuration
@EnableDynamoDBRepositories(basePackageClasses = {AgentRepository.class})
public class DynamoDBConfig
{
@Value("${aws.dynamodb.endpoint}")
private String dynamoDBEndpoint;
@Value("${aws.auth.accesskey}")
private String awsAccessKey;
@Value("${aws.auth.secretkey}")
private String awsSecretKey;
@Bean
public AmazonDynamoDB amazonDynamoDB()
{
AmazonDynamoDB dynamoDB = new AmazonDynamoDBClient(getAwsCredentials());
dynamoDB.setEndpoint(dynamoDBEndpoint);
return dynamoDB;
}
@Bean
public AWSCredentials getAwsCredentials()
{
return new BasicAWSCredentials(awsAccessKey, awsSecretKey);
}
}
AgentRepository.java
package ai.test.as.agent;
import ai.test.as.agent.Agent;
import org.socialsignin.spring.data.dynamodb.repository.EnableScan;
import org.springframework.data.repository.CrudRepository;
@EnableScan
public interface AgentRepository extends CrudRepository<Agent, String>
{
}
AgentController.java (AgentRepository가 사용되는 곳)
@RestController
@RequestMapping(value = "/v1/agents")
public class AgentController
{
@Autowired
private AgentRepository agentRepository;
@RequestMapping(value = "/test", method = RequestMethod.POST)
public void test()
{
Agent agent = new Agent();
agent.setAgentNumber("123456");
agent.setId(1);
agentRepository.save(agent);
}
}
Spring은 다음을 제안합니다. > null로 정의 된 'agentRepository'bean을 등록 할 수 없습니다. 그 이름을 가진 bean은 이미 널 (null)로 정의되었고 재 지정은 사용 불가능합니다.
여기서 Null은 무엇을 의미합니까? 내 응용 프로그램 구성이 잘못 되었기 때문입니까? 또한 이미 등록되어있을 가능성이 있습니까?
제가 다음 단계에 대해 혼란 스럽기 때문에 저에게 조언을 해주시기 바랍니다.
해결법
-
==============================
1.Bean 재 지정은 스프링 부트 2.1부터 활성화되어야하며,
Bean 재 지정은 스프링 부트 2.1부터 활성화되어야하며,
https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.1-Release-Notes
세트
spring.main.allow-bean-definition-overriding=true
과거의
spring: main: allow-bean-definition-overriding: true
다시 무시할 수 있습니다.
편집하다,
Bean Overriding은 Bean 타입이 아닌 Bean의 이름을 기반으로합니다. 예 :
@Bean public ClassA class(){ return new ClassA(); } @Bean public ClassB class(){ return new ClassB(); }
> 2.1에서이 오류가 발생합니다. 기본적으로 bean 이름은 메소드 이름에서 가져옵니다. Bean 어노테이션에 메소드의 이름을 변경하거나 name 속성을 추가하는 것은 유효한 수정 사항입니다.
from https://stackoverflow.com/questions/53723303/springboot-beandefinitionoverrideexception-invalid-bean-definition by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 자바 - OkHttp 비동기 GET 결과 검색 (0) | 2019.07.24 |
---|---|
[SPRING] 사양을 사용하는 다중 열 검색 관련된 엔티티 내의 스프링 데이터 Jpa? (0) | 2019.07.24 |
[SPRING] 스프링 데이터 - 다중 열 검색 (0) | 2019.07.23 |
[SPRING] 인증 전에 Spring Security에서 X509 인증 취소 상태 확인 (0) | 2019.07.19 |
[SPRING] Spring Boot에서 ActiveMQ 포트를 설정하는 방법은 무엇입니까? (0) | 2019.07.19 |