spring-boot - 将 Spring Boot 版本从 2.0.3.RELEASE 更改为 2.1.0.BUILD-SNAPSHOT 时出现问题
问题描述
2.0.3.RELEASE
当我将 Spring Boot 版本从更改为 时,我有一个工作代码停止工作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 os有关。
我的 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 ?
解决方案
因此,作为异常报告,有两个相同类型的 bean。从历史上看,Spring 会用另一个 bean 覆盖一个 bean。这一直是一个烦恼,因为您很难找到第二个具有完全不同类型但具有相同 bean ID 的 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
可能会为您解决问题。
推荐阅读
- ssl - 在一个握手消息中发送“加密扩展”和“服务器完成”。在 TLS1.3 中是强制性的吗?
- java - 如何将 java ArrayList 转换为数组?
- php - 删除 html 标签中的内容,但保留标签本身
- flutter - Flutter Geolocator - 询问是否被拒绝,设备位置,滚动刷新
- php - 如果我在 header.php 中设置 style.css 但我在所有其他 php 文件中包含 header.php,CSS 代码可以在所有 php 文件中工作吗?
- python - Pip 错误“导入错误:没有模块命名站点”
- c# - System.ArgumentOutOfRangeException 调用数据库名称(用于调用其中的存储过程)
- python - 关于根据 if 条件替换列表列表中的条目的基本问题
- javascript - 通过 Ajax 将 JS 数组传递给 PHP
- php - 在 html 属性中包含 php 标签