Source de données de haricot de remplacement dans le printemps de démarrage 2.1

J'ai mis à jour pour le printemps de démarrage version 2.1 et j'ai l'étrange exception lors du démarrage de l'application.

The bean 'dataSource', defined in BeanDefinition defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Hikari.class], could not be registered. A bean with that name has already been defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Hikari.class] and overriding is disabled.

Le message d'erreur complet est:

[o.s.b.w.s.c.AnnotationConfigServletWebServerApplicationContext] Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.support.BeanDefinitionOverrideException: Invalid bean definition with name 'dataSource' defined in BeanDefinition defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Hikari.class]: Cannot register bean definition [Root bean: class [org.springframework.aop.scope.ScopedProxyFactoryBean]; scope=; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null; defined in BeanDefinition defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Hikari.class]] for bean 'dataSource': There is already [Root bean: class [null]; scope=refresh; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=false; primary=false; factoryBeanName=org.springframework.boot.autoconfigure.jdbc.DataSourceConfiguration$Hikari; factoryMethodName=dataSource; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Hikari.class]] bound.

Haricots doivent pas être modifiée conformément à notre politique, et c'est désactivée avec:

spring.main.allow-bean-definition-overriding=false

Je n'ai pas toutes les données de configuration de la source dans mon code de l'application. La seule option qui déclenche cette erreur est @EnableAutoConfiguration et dans mon propriétés de l'application, j'ai défini le type de source de données:

spring.datasource.type=com.zaxxer.hikari.HikariDataSource

L'application de démarrage est initialisé avec

@SpringBootApplication
@EnableAutoConfiguration
public class MyApplication extends SpringBootServletInitializer {

    public static void main(String[] args) {
        new MyApplication()
            .configure(new SpringApplicationBuilder(MyApplication.class))
            .run(args);
    }
}

Il y a aussi de la configuration de la classe que les importations de divers autres configurations:

@Configuration
@ImportResource(locations = {
    "classpath*:conf/spring/*.xml",
    "classpath*:conf/spring/core/*.xml",
    "classpath*:conf/spring/plugin/**/*.xml"
})
@EnableAsync
@EnableRetry
@EnableCaching
@EnableBatchProcessing
@EnableCircuitBreaker
public class AppConfig {
    ...
}

Personne ne sait ce qui pourrait causer ce problème et où chercher?

Il n'a pas eu lieu avant le Printemps de Démarrage 2.1 (c'est à dire 2.0.5).

  • Vous n'avez pas besoin de définir le type de source de données (hikari est la valeur par défaut) et spring.main.allow-bean-definition-overriding=false est la valeur par défaut. Pourriez-vous ajouter la totalité de la trace de pile et ajouter votre @SpringBootApplication annoté de la classe?
  • J'ai mis à jour la question avec plein de détails de l'erreur et de l'application de configuration des classes.
  • Supprimer @EnableAutoConfiguration qui est déjà implicite par @SpringBootApplication. Aussi votre configuration est un peu étrange, pourquoi prolonger la SpringBootServletInitializer sans la mise en œuvre de la bonne méthode? et ce que vous faites dans votre méthode principale n'est pas la norme suffit d'utiliser SpringApplication.run(MyuApplication.class, args); au lieu de ce que vous avez maintenant.
  • c'est toujours la même erreur après l'application de tous ces changements.
  • Il y a bien des fichiers XML en cours de chargement n'est pas que le fait de forcer une autre importation d'une configuration existante de la classe? Trop large composante de la numérisation, par exemple?
  • Pour une raison quelconque, il semble que la source de données d'auto-configuration est en cours de traitement deux fois. Comme @M. Deinum suggère, qui pourrait être due à un composant de balayage étant trop large entre autres choses. Il est impossible de dire sans voir toutes les pièces de votre application. Pouvez-vous fournir une un minimum, complètes et vérifiables exemple?