null로 정의된 'metaDataSourceAdvisor' 빈을 등록할 수 없습니다.
Spring Boot 버전을 2.0.3에서 2.1.1로 업데이트했는데 다음과 같이 표시됩니다.
***************************
APPLICATION FAILED TO START
***************************
Description:
The bean 'metaDataSourceAdvisor', defined in null, could not be registered. A bean with that name has already been defined in null and overriding is disabled.
Action:
Consider renaming one of the beans or enabling overriding by setting spring.main.allow-bean-definition-overriding=true
에러를 알 수 있습니다.문제는defined in null
어디를 봐야 할지 좋은 포인터는 아닙니다.나는 이 질문을 봤지만 사실 애매모호한 콩을 무시하는 것을 계속 거부하고 싶다.
좋은 생각 있어요?
로그 출력
2019-01-06 07:33:39.282 INFO 29626 --- [ restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable
2019-01-06 07:33:39.282 INFO 29626 --- [ restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG'
2019-01-06 07:33:39.912 INFO 29626 --- [ restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data repositories in DEFAULT mode.
2019-01-06 07:33:39.997 INFO 29626 --- [ restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 80ms. Found 23 repository interfaces.
2019-01-06 07:33:39.999 WARN 29626 --- [ restartedMain] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.support.BeanDefinitionOverrideException: Invalid bean definition with name 'metaDataSourceAdvisor' defined in null: Cannot register bean definition [Root bean: class [org.springframework.security.access.intercept.aopalliance.MethodSecurityMetadataSourceAdvisor]; scope=; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null] for bean 'metaDataSourceAdvisor': There is already [Root bean: class [org.springframework.security.access.intercept.aopalliance.MethodSecurityMetadataSourceAdvisor]; scope=; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null] bound.
2019-01-06 07:33:40.008 INFO 29626 --- [ restartedMain] ConditionEvaluationReportLoggingListener :
Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2019-01-06 07:33:40.010 ERROR 29626 --- [ restartedMain] o.s.b.d.LoggingFailureAnalysisReporter :
그래, 내가 직접 문제를 찾았어나는 가지고 있었다@EnableGlobalMethodSecurity
두 번 작업했습니다.
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true) // <--
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
}
그리고.
@SpringBootApplication
@EnableJpaRepositories(basePackages = {"mz.server.spring.repository"})
@EnableGlobalMethodSecurity(prePostEnabled = true, proxyTargetClass = true) // <--
@EntityScan(basePackages = "mz.server.hibernate.model")
@EnableTransactionManagement
@EnableScheduling
public class Application {
}
Spring Boot의 새로운 기능이라고 생각합니다.
이러한 종류의 에러가 발생했을 경우는, 불필요한 중복 주석을 주의해 주세요.
Spring Boot 2.1 릴리즈 노트에 따라 수용된 답변을 확장합니다.
빈 오버라이드는 디폴트로 디세블로 되어 있기 때문에 실수로 오버라이드가 되는 것을 방지합니다.덮어쓰기를 사용하는 경우 spring.main.allowbean-definition-overriding을 true로 설정해야 합니다.
따라서 코드베이스에서 @EnableGlobalMethodSecurity를 여러 번 사용했으며 이러한 콩이 동일한 컴포넌트 스캔의 일부인 경우 이 주석은 metaDataSourceAdvisor bean을 여러 번 생성하려고 시도합니다.그러면 초기화 중에 예외가 발생합니다.
이는 콩을 생성하는 다른 자동 구성 주석에도 적용됩니다.활성화 주석을 한 번만 사용하십시오.
다음 주석 추가를 놓쳤는지 확인합니다(해당하는 주석 중 하나).
- @Enable Jpa Repositorys ({"com.base.package"})
- @EnableMongoRepositorys ({"com.base.package"})
이건 내게 효과가 있었다.
나는 이 모든 답을 시도했다.그런데 에러 단말기에 다음과 같이 적혀 있더군요.spring.main.allow-bean-definition-overriding=true
당신의 소유지에.그냥 나한테 효과가 있었어.
Gradle 또는 Maven에서 "청소" 및 "구축" 프로젝트를 지원합니다.
언급URL : https://stackoverflow.com/questions/54059222/the-bean-metadatasourceadvisor-defined-in-null-could-not-be-registered
'programing' 카테고리의 다른 글
react native가 ipad의 창을 채우지 않음 (0) | 2023.03.26 |
---|---|
javascript fetch를 동기화하는 방법 (0) | 2023.03.26 |
변수가 angularjs 약속인지 알 수 있는 방법이 있나요? (0) | 2023.03.26 |
PHP를 사용하여 JSON POST 읽기 (0) | 2023.03.26 |
Spring Boot 2.2.0에서의 x-forwarded 헤더에 대처하는 방법(역프록시 배후에 있는 Spring Web MVC) (0) | 2023.03.26 |