33 votes

Problème lors du changement de la version de Spring Boot de 2.0.3.RELEASE à 2.1.0.BUILD-SNAPSHOT

J'ai un code fonctionnel qui cesse de fonctionner lorsque je passe de la version Spring Boot 2.0.3.RELEASE à la version 2.1.0.BUILD-SNAPSHOT.

Parfois, l'erreur est la suivante :

Erreur au démarrage de l'application. Pour afficher le rapport sur les conditions, relancez votre application avec 'debug' activé.

***************************
ÉCHEC DE L'APPLICATION
***************************

Description :

Le bean 'dataSource', défini dans la définition de Bean du fichier de configuration de chemin de classe [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Hikari.class], n'a pas pu être enregistré. Un bean portant ce nom a déjà été défini dans le fichier de configuration de chemin de classe [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Hikari.class] et le remplacement est désactivé.

Action :

Envisagez de renommer l'un des beans ou d'activer le remplacement en définissant spring.main.allow-bean-definition-overriding=true

ou...

Erreur au démarrage de l'application. Pour afficher le rapport sur les conditions, relancez votre application avec 'debug' activé.
2018-07-16 14:38:18.509 ERROR 604 --- [           main] o.s.b.d.LoggingFailureAnalysisReporter   : 

***************************
ÉCHEC DE L'APPLICATION
***************************

Description :

Le bean 'scopedTarget.oauth2ClientContext', défini dans la définition de Bean du fichier de configuration de chemin de classe [org/springframework/boot/autoconfigure/security/oauth2/client/OAuth2RestOperationsConfiguration$SessionScopedConfiguration$ClientContextConfiguration.class], n'a pas pu être enregistré. Un bean portant ce nom a déjà été défini dans le fichier de configuration de chemin de classe [org/springframework/security/oauth2/config/annotation/web/configuration/OAuth2ClientConfiguration$OAuth2ClientContextConfiguration.class] et le remplacement est désactivé.

Action :

Envisagez de renommer l'un des beans ou d'activer le remplacement en définissant spring.main.allow-bean-definition-overriding=true

Dans les deux cas, il s'agit d'un problème de doublon de bean ou autre.

Mes dépendances POM sont les suivantes :

        org.springframework.boot
        spring-boot-starter-parent
        2.0.3.RELEASE

        UTF-8
        UTF-8
        1.8
        Finchley.BUILD-SNAPSHOT
        true

            org.springframework.boot
            spring-boot-starter-web

            org.springframework.boot
            spring-boot-starter-actuator

            org.springframework.boot
            spring-boot-starter-data-jpa

            org.springframework.boot
            spring-boot-starter-security

            org.springframework.cloud
            spring-cloud-starter-config

            org.springframework.cloud
            spring-cloud-starter-netflix-eureka-client

            org.springframework.cloud
            spring-cloud-starter-oauth2

            org.postgresql
            postgresql
            runtime

            javax.servlet
            javax.servlet-api

            javax.servlet
            jstl

            org.springframework.security
            spring-security-taglibs

            org.apache.tomcat.embed
            tomcat-embed-jasper
            provided

et la configuration :

server:
  error:
    include-stacktrace: always
    whitelabel:
      enabled: false
  servlet:
   session:
    cookie:
     name: HYDRASSESSION
  port: 36205

management:
  endpoints:
    web:
      exposure:
        include: "*"

security:
  basic:
    enabled: false
  oauth2:
      client:
        clientId: atlas
        clientSecret: secret
        accessTokenUri: http://myserverip:36202/oauth/token
        userAuthorizationUri: http://myserverip:36202/oauth/authorize
      resource:
        userInfoUri: http://myserverip:36202/user/me

spring:
  jpa:
    properties:
      hibernate:
        temp:
          use_jdbc_metadata_defaults: false 
    hibernate:
      ddl-auto: validate
  application:
    name: atlas
  datasource:
    password: admin
    username: postgres
    url: jdbc:postgresql://myserverip:36211/atlas?ApplicationName=Atlas

guardiao:
  logout:
    path: http://myserverip:36202/exit

Tout fonctionne bien lorsque j'utilise 2.0.3.RELEASE, mais je reçois une erreur en essayant de me connecter à myserver:36202/oauth/authorize?client_id= : le navigateur signale ERR_TOO_MANY_REDIRECTS mais je n'ai aucune erreur dans la console. Quoi qu'il en soit... ma question est : comment puis-je mettre à jour mon Spring Boot vers 2.1.0.BUILD-SNAPSHOT ?

1 votes

Pourquoi voudriez-vous utiliser la version 2.1? Ce n'est pas finalisé avant environ 2 à 3 mois? Au lieu de cela, corrigez le problème réel, qui ne sera pas résolu simplement en mettant à niveau Spring Boot (et tout le reste vers les versions nocturnes).

0 votes

Tu as raison. Je ne devrais pas faire ça. En réalité... le vrai problème était le clientSecret: secret .... désolé.

0 votes

Au fait... en pensant à l'avenir, j'ai peur de rencontrer ce problème de toute façon à l'avenir lorsque j'aurai besoin de le mettre à jour. Savez-vous ce qui a été modifié?

50voto

checketts Points 1850

Donc, comme l’indiquent les rapports d'exception, il y a deux beans du même type. Historiquement, Spring écrasait un bean par un autre. Cela a longtemps été une nuisance car vous pouviez rencontrer des bogues difficiles à trouver où un deuxième bean avec un type complètement différent, mais avec le même ID de bean, faisait disparaître votre premier bean.

Spring Boot 2 désactive maintenant ce type de remplacement de bean par défaut. Vous pouvez le réactiver en définissant la propriété suivante dans votre application.yml :

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

Cela réactive le comportement précédent. Cela ne résout pas la cause fondamentale de l'écrasement des beans et signifie également que vous ne bénéficierez pas des erreurs de remplacement de bean. Mettre à jour les bibliothèques sous-jacentes nettoiera probablement cela avec le temps.

Comme indiqué dans d'autres commentaires, mettre à jour la dépendance spring-security-oauth2-autoconfigure vers org.springframework.security.oauth.boot:spring-security-oauth2-autoconfigure:2.1.0.RELEASE peut résoudre le problème pour vous.

0 votes

Quelle version Initialzr nous donnera-t-il?

0 votes

Cette solution a résolu la mise à jour de la dépendance spring-security-oauth2-autoconfigure vers org.springframework.security.oauth.boot:spring-security-oaut‌​h2-autoconfigure:2.1‌​.0.RELEASE.

0 votes

J'ai ajouté la propriété ci-dessus et cela a résolu mon problème, merci

0voto

Dimi Ansari Points 15

Cette réponse pourrait être utile pour ceux qui ont mis en place un nouveau projet et ajoutent la propriété spring.main.allow-bean-definition-overriding: true dans le fichier application.properties sans que cela ne résolve le problème :

Vérifiez le dossier où se trouve votre fichier application.properties - il doit être directement disponible dans le répertoire : src/main/resources/ et pas ailleurs.

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