Spring boot 2.1.0 스타터 구성에서 spring.main.allow-bean-definition-overriding을 true로 설정하는 방법
예를 들어 알 수 없는 엔드포인트가 호출될 때 반환되는 오류 특성을 사용자 지정하는 스프링 부팅 스타터를 유지합니다.이 작업은 다음을 재정의하여 수행됩니다.org.springframework.boot.web.servlet.error.ErrorAttributes
콩의
2.0.6에서는 모든 것이 정상적으로 작동했지만 2.1.0에서는 기본적으로 재정의가 비활성화되어 스타터가 실패하고 다음 메시지가 표시됩니다.
클래스 경로 리소스 [com/mycompany/springboot/starter/config/ErrorsConfig.class]에 정의된 이름 'errorAttributes'의 빈 정의가 잘못되었습니다.빈 정의를 등록할 수 없습니다. [루트빈: 클래스 [laid]; 범위=; 추상=false; 게으릅니다.Init=false; autowireMode=3; 종속성 검사=0; autowireCandidate=true; 기본=false; 공장 BeanName=com.mycompany.springboot.starter.config.ErrorsConfig; factoryMethodName=errorAttributes; initMethodName=interval; destroyMethodName=(추정); 클래스 경로 리소스 [com/mycompany/springboot/starter/config/ErrorSconfig.class]에 정의된 'errorAttributes':이미 [루트빈: 클래스 [laid]; 범위=; 추상=false; 게으름Init=false; autowireMode=3; 종속성 검사=0; autowireCandidate=true; primary=false; 공장 BeanName=false.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration; factoryMethodName=errorAttributes; initMethodName=interval; 메서드Name=을(를) 삭제합니다. 클래스 경로 리소스에 정의됨; [org/springframework/boot/autoconfigure/web/serverlet/error/Error/ErrorMvcAutoConfiguration.class] 바인딩
설명서 설정에서 설명한 바와 같이spring.main.allow-bean-definition-overriding
property to true는 문제를 해결합니다.제 질문은 스타터에서 이를 수행하는 방법입니다(내 스타터의 사용자가 내 스타터에 고유한 작업을 위해 application.properties 파일을 변경하지 않았으면 합니다)?
나는 노력했습니다.@PropertySource("classpath:/com/mycompany/starter/application.properties")
나의 주석@Configuration
해당 파일에 정의된 속성을 사용하지만 작동하지 않습니다.
제가 무엇을 빠뜨리고 있나요?내 구성이 빈을 재정의할 수 있는 방법이 있습니까?
구성의 (간단한) 소스 코드는 다음과 같습니다.
@Configuration
@PropertySource("classpath:/com/mycompany/starter/application.properties")
public class ErrorsConfig {
private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
@Bean
public ErrorAttributes errorAttributes() {
return new DefaultErrorAttributes() {
@SuppressWarnings("unchecked")
@Override
public Map<String, Object> getErrorAttributes(WebRequest request, boolean includeStackTrace) {
Map<String, Object> errorAttributes = super.getErrorAttributes(request, includeStackTrace);
// CustomeError is a (simplified) bean of the error attributes we should return.
CustomError err = new CustomError("myErrorCode", (String) errorAttributes.get("error"));
return OBJECT_MAPPER.convertValue(err, Map.class);
}
};
}
}
그리고 내 자원 파일.com/mycompany/starter/application.properties
포함하다
spring.main.allow-bean-definition-definition-definition=true
스링츠부프츠.ErrorAttributes
콩은 다음으로 정의됩니다.ErrorMvcAutoConfiguration
다음과 같은 주석이 있습니다.@ConditionalOnMissingBean
그래서 그것은 만약에ErrorAttributes
빈이 이미 정의되었습니다.당신이 정의한 콩으로서.ErrorsConfig
의 클래부재합을 .ErrorAttributes
로 물러나게 보다는 콩, 즉 콩입니다.ErrorsConfig
부팅 후 클래스를 처리해야 합니다.ErrorMvcAutoConfiguration
클래스. 즉, 시동기에 주문 문제가 있습니다.
는 자동구클래처순다서사음제수있용다습니어를 사용하여 할 수 .@AutoConfigureBefore
그리고.@AutoConfigureAfter
라고 가정하면,ErrorsConfig
는 자체적으로 체가에자구클성에 등록된 입니다.spring.factories
당신은 그것에 주석을 달아서 당신의 문제를 고칠 수 있습니다.@AutoConfigureBefore(ErrorMvcAutoConfiguration.class)
이 변경 사항이 적용된 상태에서ErrorsConfig
합니다.ErrorAttributes
보다 에 콩ErrorMvcAutoConfiguration
Boot합니다.ErrorsAttribute
뒤로 물러설 수 없는 사람
이 더 입니다.spring.main.allow-bean-definition-overriding=true
에 시대에application.properties
.
저도 비슷한 문제에 직면한 적이 있습니다.하지만 제 경우의 문제는 제가 모델 수업에서 @Entity annotation을 사용하고 있었다는 것입니다.나는 백엔드에 mongodb를 사용하고 있어서 엔티티가 Jpa에서 와서 이 문제가 발생했습니다.제가 제거한 후에 작동하기 시작했습니다.
언급URL : https://stackoverflow.com/questions/53450897/how-to-set-spring-main-allow-bean-definition-overriding-to-true-in-a-spring-boot
'programing' 카테고리의 다른 글
오라클 번호 형식의 원치 않는 선행 공백 (0) | 2023.07.07 |
---|---|
에서 포스트백 사용 안 함 (0) | 2023.07.07 |
VBA를 사용하지 않는 Excel의 MD5 해시 함수 (0) | 2023.07.07 |
Oracle 11g의 객체 유형 열에서 선택하는 방법은 무엇입니까? (0) | 2023.07.07 |
VBA에서 TextFrame 또는 TextFrame2를 사용하는 경우 (0) | 2023.07.07 |