Spring пытается переопределить «internalBeanConfigurerAspect» предотвращает запуск - PullRequest
0 голосов
/ 28 декабря 2018

Сегодня я попытался обновить наше приложение с 2.0.6.RELEASE->2.1.1.RELEASE, но оно больше не запускается из-за:

org.springframework.beans.factory.support.BeanDefinitionOverrideException: Invalid bean definition with name 'org.springframework.context.config.internalBeanConfigurerAspect' defined in class path resource [org/springframework/context/annotation/aspectj/SpringConfiguredConfiguration.class]: Cannot register bean definition [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.springframework.context.annotation.aspectj.SpringConfiguredConfiguration; factoryMethodName=beanConfigurerAspect; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/springframework/context/annotation/aspectj/SpringConfiguredConfiguration.class]] for bean 'org.springframework.context.config.internalBeanConfigurerAspect': There is already [Root bean: class [org.springframework.beans.factory.aspectj.AnnotationBeanConfigurerAspect]; scope=; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=aspectOf; initMethodName=null; destroyMethodName=null] bound.
  at org.springframework.beans.factory.support.DefaultListableBeanFactory.registerBeanDefinition(DefaultListableBeanFactory.java:894)
  at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsForBeanMethod(ConfigurationClassBeanDefinitionReader.java:274)
  at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsForConfigurationClass(ConfigurationClassBeanDefinitionReader.java:141)
  at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitions(ConfigurationClassBeanDefinitionReader.java:117)
  at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:327)
  at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:232)
  at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:275)
  at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:95)
  at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:691)
  at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:528)
  at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:142)
  at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:775)
  at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397)
  at org.springframework.boot.SpringApplication.run(SpringApplication.java:316)

Сначала я думал, что это из-за ошибки в данных Spring, но это ужеисправлено в этом выпуске ( ошибка бросков переопределения bean-компонентов Spring в JpaAuditingRegistrar ).

Когда я отлаживаю последовательность запуска, я вижу, что JpaAuditingRegistrar первым регистрирует бин с именем org.springframework.context.config.internalBeanConfigurerAspect тогда следующий класс, который заставляет бин быть зарегистрирован с этим именем, будет SpringConfiguredConfiguration.

Что еще я мог бы исследовать, чтобы решить эту проблему?Я стремлюсь не просто разрешить переопределение бобов, но разве это единственный выход из этого?

Некоторые соответствующие классы конфигурации пружин:

AopConfig

@Configuration
@EnableSpringConfigured
public class AopConfig {

    /**
     * Ensure that all critical aspects have been configured.
     * This method will blow up if they are not.
     */
    @PostConstruct
    public void postConstruct() {
        Aspects.aspectOf(AnnotationBeanConfigurerAspect.class);
    }
}

JpaConfig

@EnableTransactionManagement(mode = AdviceMode.ASPECTJ)
@EnableJpaRepositories(repositoryBaseClass = BaseJpaDaoImpl.class, basePackages = "com.xxx")
@EnableJpaAuditing(auditorAwareRef = "auditorProvider", dateTimeProviderRef = "auditingDateTimeProvider")
@EntityScan("com.xxx")
@Configuration
public class JpaConfig {

    @NotNull
    @Bean
    public AuditorAware<String> auditorProvider() {
        return new JpaAuditorAwareImpl();
    }

    @NotNull
    @Bean(name = "auditingDateTimeProvider")
    public DateTimeProvider auditingDateTimeProvider() {
        return () -> Optional.of(ZonedDateTime.now());
    }
}

Приложение

@SpringBootApplication(scanBasePackages = "com.xxx")
@EnableWebSecurity
@EnableGlobalMethodSecurity(securedEnabled = true)
@EnableAsync
@EnableScheduling
public class Application extends SpringBootServletInitializer { ... }

Другая информация:

  • Java 8
  • Spring-Cloud Greenwich.RC2
  • spring-boot-starter-data -asticsearch

Выход из debug=true:

https://gist.github.com/oliverhenlich/69a253e253dfd7c0189fc472f00705ad

...