Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

java.lang.StackOverflowError when running Spring Boot app with Java 11

I am trying to run a simple hello world app in Spring Boot (2.1.2.RELEASE) on Java 11 (jdk-11.0.2) on Windows. When I run the application with the Maven spring boot plugin I get the following Exception:

            Exception in thread "main" java.lang.StackOverflowError
                at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:408)
                at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:357)
                at org.apache.commons.logging.LogAdapter$Slf4jAdapter.createLocationAwareLog(LogAdapter.java:130)
                at org.apache.commons.logging.LogAdapter.createLog(LogAdapter.java:91)
                at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:67)
                at org.slf4j.impl.JCLLoggerFactory.getLogger(JCLLoggerFactory.java:77)
                at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:358)
                at org.apache.commons.logging.LogAdapter$Slf4jAdapter.createLocationAwareLog(LogAdapter.java:130)
                at org.apache.commons.logging.LogAdapter.createLog(LogAdapter.java:91)
                at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:67)
                at org.slf4j.impl.JCLLoggerFactory.getLogger(JCLLoggerFactory.java:77)
                at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:358)
                at org.apache.commons.logging.LogAdapter$Slf4jAdapter.createLocationAwareLog(LogAdapter.java:130)

I have the following Java code:

            @SpringBootApplication
            @PropertySource(value = "${url/ELMProperties}", ignoreResourceNotFound = true)
            @PropertySource(value = "classpath:version/elm.properties")
            //TODO remove the below line once the data source has been configured
            @EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class})
            public class Application extends SpringBootServletInitializer
            {
                @Override
                protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
                    return application.sources(com.test.Application.class);
                }

                public static void main(String[] args)
                {
                    SpringApplication.run(com.test.Application.class, args);
                    System.out.println("Hello world");
                }
            }

In order exclude by adding the following in my pom.xml file:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <version>${spring-boot.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

Here is my maven dependency tree:

            [INFO] --- maven-dependency-plugin:3.1.1:tree (default-cli) @ ep-elm-web ---
            [INFO] com.earthport.elm:ep-elm-web:war:2019.1.0-SNAPSHOT
            [INFO] +- com.earthport.security:ep-security-client:jar:2.1.0:compile
            [INFO] |  +- org.springframework:spring-context:jar:5.1.4.RELEASE:compile
            [INFO] |  |  \- org.springframework:spring-expression:jar:5.1.4.RELEASE:compile
            [INFO] |  +- org.springframework:spring-web:jar:5.1.4.RELEASE:compile
            [INFO] |  +- org.springframework.security:spring-security-core:jar:5.1.3.RELEASE:compile
            [INFO] |  +- org.springframework.security:spring-security-web:jar:5.1.3.RELEASE:compile
            [INFO] |  +- com.fasterxml.jackson.core:jackson-annotations:jar:2.9.0:compile
            [INFO] |  +- com.fasterxml.jackson.core:jackson-core:jar:2.9.8:compile
            [INFO] |  \- com.google.guava:guava:jar:14.0:compile
            [INFO] +- com.earthport.shared:rabbit-support:jar:2.0.0:compile
            [INFO] |  +- org.springframework.amqp:spring-amqp:jar:2.1.3.RELEASE:compile
            [INFO] |  +- org.springframework.amqp:spring-rabbit:jar:2.1.3.RELEASE:compile
            [INFO] |  |  +- com.rabbitmq:amqp-client:jar:5.4.3:compile
            [INFO] |  |  \- org.springframework:spring-tx:jar:5.1.4.RELEASE:compile
            [INFO] |  +- org.springframework.retry:spring-retry:jar:1.2.3.RELEASE:compile
            [INFO] |  +- org.springframework:spring-aop:jar:5.1.4.RELEASE:compile
            [INFO] |  +- org.springframework:spring-core:jar:5.1.4.RELEASE:compile
            [INFO] |  |  \- org.springframework:spring-jcl:jar:5.1.4.RELEASE:compile
            [INFO] |  \- org.springframework:spring-beans:jar:5.1.4.RELEASE:compile
            [INFO] +- org.springframework.boot:spring-boot-starter:jar:2.1.2.RELEASE:compile
            [INFO] |  +- org.springframework.boot:spring-boot:jar:2.1.2.RELEASE:compile
            [INFO] |  +- org.springframework.boot:spring-boot-autoconfigure:jar:2.1.2.RELEASE:compile
            [INFO] |  +- javax.annotation:javax.annotation-api:jar:1.3.2:compile
            [INFO] |  \- org.yaml:snakeyaml:jar:1.23:runtime
            [INFO] +- org.springframework.boot:spring-boot-starter-web:jar:2.1.2.RELEASE:compile
            [INFO] |  +- org.springframework.boot:spring-boot-starter-json:jar:2.1.2.RELEASE:compile
            [INFO] |  |  +- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:2.9.8:compile
            [INFO] |  |  \- com.fasterxml.jackson.module:jackson-module-parameter-names:jar:2.9.8:compile
            [INFO] |  +- org.hibernate.validator:hibernate-validator:jar:6.0.14.Final:compile
            [INFO] |  |  +- javax.validation:validation-api:jar:2.0.1.Final:compile
            [INFO] |  |  +- org.jboss.logging:jboss-logging:jar:3.3.2.Final:compile
            [INFO] |  |  \- com.fasterxml:classmate:jar:1.4.0:compile
            [INFO] |  \- org.springframework:spring-webmvc:jar:5.1.4.RELEASE:compile
            [INFO] +- org.springframework.boot:spring-boot-starter-data-jpa:jar:2.1.2.RELEASE:compile
            [INFO] |  +- org.springframework.boot:spring-boot-starter-aop:jar:2.1.2.RELEASE:compile
            [INFO] |  |  \- org.aspectj:aspectjweaver:jar:1.9.2:compile
            [INFO] |  +- org.springframework.boot:spring-boot-starter-jdbc:jar:2.1.2.RELEASE:compile
            [INFO] |  |  +- com.zaxxer:HikariCP:jar:3.2.0:compile
            [INFO] |  |  \- org.springframework:spring-jdbc:jar:5.1.4.RELEASE:compile
            [INFO] |  +- javax.transaction:javax.transaction-api:jar:1.3:compile
            [INFO] |  +- javax.xml.bind:jaxb-api:jar:2.3.1:compile
            [INFO] |  |  \- javax.activation:javax.activation-api:jar:1.2.0:compile
            [INFO] |  +- org.hibernate:hibernate-core:jar:5.3.7.Final:compile
            [INFO] |  |  +- javax.persistence:javax.persistence-api:jar:2.2:compile
            [INFO] |  |  +- org.javassist:javassist:jar:3.23.1-GA:compile
            [INFO] |  |  +- net.bytebuddy:byte-buddy:jar:1.9.7:compile
            [INFO] |  |  +- antlr:antlr:jar:2.7.7:compile
            [INFO] |  |  +- org.jboss:jandex:jar:2.0.5.Final:compile
            [INFO] |  |  +- org.dom4j:dom4j:jar:2.1.1:compile
            [INFO] |  |  \- org.hibernate.common:hibernate-commons-annotations:jar:5.0.4.Final:compile
            [INFO] |  +- org.springframework.data:spring-data-jpa:jar:2.1.4.RELEASE:compile
            [INFO] |  |  +- org.springframework.data:spring-data-commons:jar:2.1.4.RELEASE:compile
            [INFO] |  |  \- org.springframework:spring-orm:jar:5.1.4.RELEASE:compile
            [INFO] |  \- org.springframework:spring-aspects:jar:5.1.4.RELEASE:compile
            [INFO] +- org.springframework.boot:spring-boot-starter-amqp:jar:2.1.2.RELEASE:compile
            [INFO] |  \- org.springframework:spring-messaging:jar:5.1.4.RELEASE:compile
            [INFO] +- org.springframework.boot:spring-boot-starter-security:jar:2.1.2.RELEASE:compile
            [INFO] |  \- org.springframework.security:spring-security-config:jar:5.1.3.RELEASE:compile
            [INFO] +- org.springframework.boot:spring-boot-starter-actuator:jar:2.1.2.RELEASE:compile
            [INFO] |  +- org.springframework.boot:spring-boot-actuator-autoconfigure:jar:2.1.2.RELEASE:compile
            [INFO] |  |  \- org.springframework.boot:spring-boot-actuator:jar:2.1.2.RELEASE:compile
            [INFO] |  \- io.micrometer:micrometer-core:jar:1.1.2:compile
            [INFO] |     +- org.hdrhistogram:HdrHistogram:jar:2.1.9:compile
            [INFO] |     \- org.latencyutils:LatencyUtils:jar:2.0.3:compile
            [INFO] +- org.springframework:spring-context-support:jar:5.1.4.RELEASE:compile
            [INFO] +- com.fasterxml.jackson.core:jackson-databind:jar:2.9.8:compile
            [INFO] +- com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:2.9.8:compile
            [INFO] +- org.slf4j:slf4j-api:jar:1.7.25:compile
            [INFO] +- org.slf4j:slf4j-jcl:jar:1.7.25:compile
            [INFO] +- com.hazelcast:hazelcast-all:jar:3.6.2:compile
            [INFO] +- io.vavr:vavr:jar:0.9.1:compile
            [INFO] |  \- io.vavr:vavr-match:jar:0.9.1:compile
            [INFO] +- io.vavr:vavr-jackson:jar:0.9.1:compile
            [INFO] +- org.quartz-scheduler:quartz:jar:2.3.0:compile
            [INFO] |  +- com.mchange:c3p0:jar:0.9.5.2:compile
            [INFO] |  +- com.mchange:mchange-commons-java:jar:0.2.11:compile
            [INFO] |  \- com.zaxxer:HikariCP-java6:jar:2.3.13:compile
            [INFO] +- org.springframework.boot:spring-boot-starter-test:jar:2.1.2.RELEASE:test
            [INFO] |  +- org.springframework.boot:spring-boot-test:jar:2.1.2.RELEASE:test
            [INFO] |  +- org.springframework.boot:spring-boot-test-autoconfigure:jar:2.1.2.RELEASE:test
            [INFO] |  +- com.jayway.jsonpath:json-path:jar:2.4.0:test
            [INFO] |  |  \- net.minidev:json-smart:jar:2.3:test
            [INFO] |  |     \- net.minidev:accessors-smart:jar:1.2:test
            [INFO] |  |        \- org.ow2.asm:asm:jar:5.0.4:test
            [INFO] |  +- junit:junit:jar:4.12:test
            [INFO] |  +- org.assertj:assertj-core:jar:3.11.1:test
            [INFO] |  +- org.mockito:mockito-core:jar:2.23.4:test
            [INFO] |  |  \- net.bytebuddy:byte-buddy-agent:jar:1.9.7:test
            [INFO] |  +- org.hamcrest:hamcrest-core:jar:1.3:test
            [INFO] |  +- org.hamcrest:hamcrest-library:jar:1.3:test
            [INFO] |  +- org.skyscreamer:jsonassert:jar:1.5.0:test
            [INFO] |  |  \- com.vaadin.external.google:android-json:jar:0.0.20131108.vaadin1:test
            [INFO] |  +- org.springframework:spring-test:jar:5.1.4.RELEASE:test
            [INFO] |  \- org.xmlunit:xmlunit-core:jar:2.6.2:test
            [INFO] +- com.jayway.awaitility:awaitility:jar:1.6.3:test
            [INFO] |  +- cglib:cglib-nodep:jar:3.1:test
            [INFO] |  \- org.objenesis:objenesis:jar:2.1:test
            [INFO] +- io.vavr:vavr-test:jar:0.9.1:test
            [INFO] +- org.springframework.boot:spring-boot-starter-tomcat:jar:2.1.2.RELEASE:compile
            [INFO] |  +- org.apache.tomcat.embed:tomcat-embed-core:jar:9.0.14:compile
            [INFO] |  +- org.apache.tomcat.embed:tomcat-embed-el:jar:9.0.14:compile
            [INFO] |  \- org.apache.tomcat.embed:tomcat-embed-websocket:jar:9.0.14:compile
            [INFO] +- org.projectlombok:lombok:jar:1.18.4:provided
            [INFO] +- c3p0:c3p0:jar:0.9.1.2:provided
            [INFO] +- com.earthport.db2:db2jcc4:jar:4.23.42:provided
            [INFO] \- commons-logging:commons-logging:jar:1.1.1:provided

Has anyone seen a similar error like this before? This set up has not had problems when using Java 8.

like image 304
sachman Avatar asked Jul 16 '26 02:07

sachman


1 Answers

Your dependency on org.slf4j:slf4j-jcl means that logging calls made using the SLF4J API will be passed to Commons Logging. Your dependency on org.springframework:spring-jcl means that calls to Commons Logging will be passed to SLF4J. This creates a cycle resulting in a stack overflow error.

Exactly how you fix the problem will depend on how you want your application to perform its logging, but you need to update your dependencies so that you have either org.slf4j:slf4j-jcl or org.springframework:spring-jcl on the classpath, and not both.

like image 105
Andy Wilkinson Avatar answered Jul 18 '26 22:07

Andy Wilkinson