26 votes

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.

Le haricot "source de données", définis dans BeanDefinition définis dans le chemin de classe de ressource [org/springframework/boot/configurer automatiquement/jdbc/DataSourceConfiguration$Hikari.class], n'a pas pu être enregistré. Un haricot avec ce nom a déjà été défini dans le chemin de classe de ressource [org/springframework/boot/configurer automatiquement/jdbc/DataSourceConfiguration$Hikari.class] et dominante est désactivé.

Le message d'erreur complet est:

[o.s.b.w.s.c.AnnotationConfigServletWebServerapplicationcontext] Exception rencontrée pendant l'initialisation du contexte - l'annulation de l'actualisation tentative: org.springframework.les haricots.usine.de soutien.BeanDefinitionOverrideException: Invalid bean définition avec le nom "source de données" défini dans la BeanDefinition définis dans le chemin de classe de ressource [org/springframework/boot/configurer automatiquement/jdbc/DataSourceConfiguration$Hikari.class]: Impossible d'enregistrer le haricot définition [Root bean: la classe [org.springframework.aop.la portée.ScopedProxyFactoryBean]; champ=; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; principal=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null; défini dans BeanDefinition définis dans le chemin de classe de ressource [org/springframework/boot/configurer automatiquement/jdbc/DataSourceConfiguration$Hikari.class]] pour bean "dataSource": Il n'y est déjà [Root bean: la classe [null]; champ=refresh; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=false; principal=false; factoryBeanName=org.springframework.de démarrage.auto-configurer.jdbc.DataSourceConfiguration$Hikari; factoryMethodName=dataSource; initMethodName=null; destroyMethodName=(présumées); défini dans le chemin de classe de ressource [org/springframework/boot/configurer automatiquement/jdbc/DataSourceConfiguration$Hikari.class]] lié.

Les 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).

27voto

Brad Fontaine Points 286

J'ai rencontré un problème similaire avec ce aujourd'hui et le printemps suivant cloud config question qui m'a aidé: Question 1142.

Nous avons été à l'aide de Printemps Cloud Config qui n'est pas compatible avec Spring Boot 2.1.0 encore. Le méridien de Greenwich libération train de Printemps Nuage sera compatible avec Spring Boot 2.1.0.

Votre @EnableCircuitBreaker d'annotation m'amène à croire que vous pouvez également utiliser une version de Printemps Nuage qui n'est pas compatible avec la version 2.1.0 de Printemps de Démarrage.

4voto

Rahul Points 119

L'ajout de la propriété suivante dans application.properties résoudrait le problème.

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

De plus, il faudra peut-être ajouter une autre propriété pour résoudre un autre problème mentionné: https://github.com/openzipkin/zipkin/issues/2043

management.metrics.web.server.auto-time-requests = false

1voto

Pour Spring Boot 2+, vous pouvez exclure la configuration automatique

 @SpringBootApplication(exclude = ElasticsearchDataAutoConfiguration.class)
     public class YourApplication {
 ... }
 

0voto

Vicky Points 97

J'ai eu ce problème lorsque j'essaye de configurer Redis dans mon projet, enfin je le résolve en utilisant:

 @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class})

 

J'utilise SpringBoot 2.4.2

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X