The bean 'metaDataSourceAdvisor', defined in null, could not be registered

后端 未结 3 1562
栀梦
栀梦 2020-12-16 09:30

I\'ve updated the Spring Boot version from 2.0.3 to 2.1.1 but I\'m getting this:

***************************
APPLICATION FAILED TO START
********************         


        
相关标签:
3条回答
  • 2020-12-16 09:55

    Okay, I found the issue myself: I had @EnableGlobalMethodSecurity twice in my project:

    @Configuration
    @EnableWebSecurity
    @EnableGlobalMethodSecurity(prePostEnabled = true) // <--
    public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    }
    

    and

    @SpringBootApplication
    @EnableJpaRepositories(basePackages = {"mz.server.spring.repository"})
    @EnableGlobalMethodSecurity(prePostEnabled = true, proxyTargetClass = true) // <--
    @EntityScan(basePackages = "mz.server.hibernate.model")
    @EnableTransactionManagement
    @EnableScheduling
    public class Application {
    }
    

    So that's a nice new Spring Boot feature I'd say.

    Just watch out for unwanted duplicate annotations if you see this kind of error.

    0 讨论(0)
  • 2020-12-16 10:00

    Expanding on the accepted answer, as per the release notes for Spring Boot 2.1

    Bean overriding has been disabled by default to prevent a bean being accidentally overridden. If you are relying on overriding, you will need to set spring.main.allow-bean-definition-overriding to true.

    So if you have used @EnableGlobalMethodSecurity more than once in your codebase and these beans are part of the same component scan then this annotation will attempt to create the metaDataSourceAdvisor bean more than once. This will throw an exception during initialization.

    This will also apply to other auto configuration annotations that create beans. Make sure to only use their enabling annotations once.

    0 讨论(0)
  • 2020-12-16 10:09

    Can help "clean" and "build" project in Gradle or Maven.

    0 讨论(0)
提交回复
热议问题