代码之家  ›  专栏  ›  技术社区  ›  Stefan Falk

无法注册在null中定义的bean“metaDataSourceAdvisor”

  •  1
  • Stefan Falk  · 技术社区  · 7 年前

    我已将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 并不是一个很好的指标。我见过 this question 但实际上我更倾向于不允许覆盖不明确的bean。

    有什么想法吗?


    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   : 
    
    1 回复  |  直到 7 年前
        1
  •  87
  •   Stefan Falk    7 年前

    好吧,我自己发现了问题:我 @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 {
    }
    

    如果您看到这种错误,请注意不需要的重复注释。

        2
  •  29
  •   Stensig    7 年前

    release notes 用于弹簧护套2.1

    因此,如果您在代码库中多次使用@EnableGlobalMethodSecurity,并且这些bean是同一组件扫描的一部分,那么此注释将多次尝试创建metaDataSourceAdvisor bean。这将在初始化期间引发异常。

    一旦

        3
  •  -3
  •   coventry    5 年前

    可以在Gradle或Maven中帮助“清理”和“构建”项目。