Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Trouble when changing Spring Boot version from 2.0.3.RELEASE to 2.1.0.BUILD-SNAPSHOT

Tags:

spring-boot

I have a working code that stops to work when I change Spring Boot version from 2.0.3.RELEASE to 2.1.0.BUILD-SNAPSHOT.

Sometimes the error is:

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 

or ...

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 

Both cases it is related to duplicated bean os something else.

My POM dependencies are:

    <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> 

and the config:

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 

It run fine when using 2.0.3.RELEASE but I'm receiving an error when try to login myserver:36202/oauth/authorize?client_id=: by browser complains ERR_TOO_MANY_REDIRECTS but I have no errors in console. Anyway... my question is: how can I update my SpringBoot to 2.1.0.BUILD-SNAPSHOT ?

like image 448
Magno C Avatar asked Jul 16 '18 17:07

Magno C


People also ask

What version of Spring does spring boot 2 use?

Spring Boot 2.0 builds on and requires Spring Framework 5.

What is the latest Springboot version?

What is the latest Spring Boot version? The current stable version, as of July 2022, is Spring Boot 2.7. 1.

What is meant by snapshot in spring boot?

7-SNAPSHOT means it has not been released yet... I can't answer if Spring will release it ever... – khmarbaise.


1 Answers

So as the exception reports, there are two beans of the same type. Historically Spring would override one bean with the other. That has long been an annoyance since you could get hard to find bugs where a second bean with a completely different type, but with the same bean ID would make your first bean vanish.

Spring Boot 2 now disables that sort of bean overriding by default. You can re-enable it by setting the following property in your application.yml:

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

This re-enables the previous behavior. It doesn't address the root cause that beans are being overridden though and also mean you won't get the benefit of bean override errors. Upgrading the underlying libraries will hopefully clean this up over time.

As noted on other comments, upgrading the spring-security-oauth2-autoconfigure dependency to org.springframework.security.oauth.boot:spring-security-oauth2-autoconfigure:2.1.0.RELEASE may solve it for you.

like image 124
checketts Avatar answered Oct 02 '22 21:10

checketts