У меня есть рабочий код, который перестает работать, когда я меняю версию 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?
Ты прав. Я не должен этого делать. На самом деле ... настоящая проблема была в clientSecret: secret .... извините.
Кстати ... забегая вперед, я все равно боюсь получить эту проблему в будущем, когда мне нужно будет обновить. Вы знаете, что было изменено?
Это все еще проблема, поскольку сегодня выпущена версия 2.1. Вы еще не нашли решение?
Удалось решить первую проблему, связанную с источником данных, путем обновления версии Spring Cloud до Greenwich.M1, но второе исключение все еще сохраняется.
обходное решение добавлено ниже в application.yml spring.main.allow-bean-definition-overriding: true
Ошибка scopedTarget.oauth2ClientContext исчезла после обновления этой группы компиляции зависимостей: 'org.springframework.security.oauth.boot', имя: 'spring-security-oauth2-autoconfigure', версия: '2.1.0.RELEASE'
@checketts, такая же проблема. Вы нашли решение?
Столкнулся с той же проблемой сегодня. Для меня это было вызвано наличием облачных зависимостей Spring, принесенных стартером OpenFeign.
Золотое правило - никогда не полагаться на сборку моментальных снимков.
@Derp, затем какое было исправление, пожалуйста?
@JarrodRoberson только что проверил мой pom: я использовал <dependencyManagement> и закрепил версию Spring Cloud на Finchley.SR2




Итак, в отчете об исключении есть два 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?
Этот Решенный "обновление зависимости spring -security-oauth2-autoconfigure до org.springframework.security.oauth.boot: spring-security-oaut h2-autoconfigure: 2.1 .0.RELEASE"
Этот ответ может быть полезен для тех, кто настроил новый проект и добавление свойства spring.main.allow-bean-definition-overriding: true в файл application.properties не решает проблему:
Проверьте папку, в которой находится ваш файл application.properties - он должен быть доступен непосредственно в каталоге: src/main/resources/, а не где-либо еще.
Зачем вам использовать 2.1? Это не окончательно до 2–3 месяцев? Вместо этого исправьте фактическую проблему, которая не будет решена простым обновлением Spring Boot (и всего остального до ночных сборок).