programing

null로 정의된 'metaDataSourceAdvisor' 빈을 등록할 수 없습니다.

testmans 2023. 3. 26. 09:58
반응형

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을 여러 번 생성하려고 시도합니다.그러면 초기화 중에 예외가 발생합니다.

이는 콩을 생성하는 다른 자동 구성 주석에도 적용됩니다.활성화 주석을 한 번만 사용하십시오.

다음 주석 추가를 놓쳤는지 확인합니다(해당하는 주석 중 하나).

  1. @Enable Jpa Repositorys ({"com.base.package"})
  2. @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

반응형