Проблема при изменении версии Spring Boot с 2.0.3.RELEASE на 2.1.0.BUILD-SNAPSHOT

У меня есть рабочий код, который перестает работать, когда я меняю версию Spring Boot с 2.0.3.RELEASE на 2.1.0.BUILD-SNAPSHOT.

Иногда ошибка бывает:

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.

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

Description:

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.

Action:

Consider renaming one of the beans or enabling overriding by setting spring.main.allow-bean-definition-overriding=true

или же ...

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2018-07-16 14:38:18.509 ERROR 604 --- [           main] o.s.b.d.LoggingFailureAnalysisReporter   : 

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

Description:

The bean 'scopedTarget.oauth2ClientContext', defined in class path resource [org/springframework/boot/autoconfigure/security/oauth2/client/OAuth2RestOperationsConfiguration$SessionScopedConfiguration$ClientContextConfiguration.class], could not be registered. A bean with that name has already been defined in class path resource [org/springframework/security/oauth2/config/annotation/web/configuration/OAuth2ClientConfiguration$OAuth2ClientContextConfiguration.class] and overriding is disabled.

Action:

Consider renaming one of the beans or enabling overriding by setting spring.main.allow-bean-definition-overriding=true

В обоих случаях это связано с дублированием bean-компонента или чем-то еще.

Мои зависимости POM:

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.3.RELEASE</version>
        <relativePath/> 
    </parent>


    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <spring-cloud.version>Finchley.BUILD-SNAPSHOT</spring-cloud.version>
        <maven.test.skip>true</maven.test.skip>
    </properties>   


   <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>        
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>        
         <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>       
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
        </dependency>          
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>        
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-oauth2</artifactId>
        </dependency>


        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-taglibs</artifactId>
        </dependency>   
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
            <scope>provided</scope>
        </dependency>       


    </dependencies>

и конфиг:

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

Он отлично работает при использовании 2.0.3.RELEASE, но я получаю сообщение об ошибке при попытке входа в систему myserver:36202/oauth/authorize?client_id=: браузер жалуется на ERR_TOO_MANY_REDIRECTS, но у меня нет ошибок в консоли. В любом случае ... у меня вопрос: как мне обновить SpringBoot до 2.1.0.BUILD-SNAPSHOT?

Зачем вам использовать 2.1? Это не окончательно до 2–3 месяцев? Вместо этого исправьте фактическую проблему, которая не будет решена простым обновлением Spring Boot (и всего остального до ночных сборок).

M. Deinum 16.07.2018 20:01

Ты прав. Я не должен этого делать. На самом деле ... настоящая проблема была в clientSecret: secret .... извините.

Magno C 16.07.2018 20:29

Кстати ... забегая вперед, я все равно боюсь получить эту проблему в будущем, когда мне нужно будет обновить. Вы знаете, что было изменено?

Magno C 17.07.2018 13:39

Это все еще проблема, поскольку сегодня выпущена версия 2.1. Вы еще не нашли решение?

checketts 30.10.2018 19:50

Удалось решить первую проблему, связанную с источником данных, путем обновления версии Spring Cloud до Greenwich.M1, но второе исключение все еще сохраняется.

Munish Chandel 31.10.2018 04:05

обходное решение добавлено ниже в application.yml spring.main.allow-bean-definition-overriding: true

Aura 31.10.2018 13:28

Ошибка scopedTarget.oauth2ClientContext исчезла после обновления этой группы компиляции зависимостей: 'org.springframework.security.oauth.boot', имя: 'spring-security-oauth2-autoconfigure', версия: '2.1.0.RELEASE'

Munish Chandel 02.11.2018 03:28

@checketts, такая же проблема. Вы нашли решение?

StasKolodyuk 02.11.2018 10:43

Столкнулся с той же проблемой сегодня. Для меня это было вызвано наличием облачных зависимостей Spring, принесенных стартером OpenFeign.

Kirill 22.11.2018 12:46

Золотое правило - никогда не полагаться на сборку моментальных снимков.

vikingsteve 23.11.2018 14:49

@Derp, затем какое было исправление, пожалуйста?

user10677470 07.06.2019 21:46

@JarrodRoberson только что проверил мой pom: я использовал <dependencyManagement> и закрепил версию Spring Cloud на Finchley.SR2

Kirill 08.06.2019 10:45
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Версия Java на основе версии загрузки
Версия Java на основе версии загрузки
Если вы зайдете на официальный сайт Spring Boot , там представлен start.spring.io , который упрощает создание проектов Spring Boot, как показано ниже.
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
33
12
30 369
2

Ответы 2

Итак, в отчете об исключении есть два bean-компонента одного типа. Исторически Spring перекрывала один bean-компонент другим. Это уже давно раздражало, так как было трудно найти ошибки, при которых второй bean-компонент с совершенно другим типом, но с тем же идентификатором bean-компонента мог бы привести к исчезновению вашего первого bean-компонента.

Spring Boot 2 теперь по умолчанию отключает такое переопределение bean-компонентов. Вы можете повторно включить его, установив следующее свойство в вашем application.yml:

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

Это повторно активирует предыдущее поведение. Это не устраняет основную причину переопределения bean-компонентов, а также означает, что вы не получите выгоды от ошибок переопределения bean-компонентов. Мы надеемся, что обновление базовых библиотек со временем очистит это.

Как отмечалось в других комментариях, обновление зависимости spring-security-oauth2-autoconfigure до org.springframework.security.oauth.boot:spring-security-oauth2-autoconfigure:2.1.0.RELEASE может решить эту проблему за вас.

Какую версию нам даст Initialzr?

Magno C 07.11.2018 16:15

Этот Решенный "обновление зависимости spring -security-oauth2-autoconfigure до org.springframework.security.oauth.boot: spring-security-oaut‌ h2-autoconfigure: 2.1‌ .0.RELEASE"

Arjun Shetty 21.08.2019 18:52

Этот ответ может быть полезен для тех, кто настроил новый проект и добавление свойства spring.main.allow-bean-definition-overriding: true в файл application.properties не решает проблему:

Проверьте папку, в которой находится ваш файл application.properties - он должен быть доступен непосредственно в каталоге: src/main/resources/, а не где-либо еще.

Другие вопросы по теме