Raphael
Raphael

Reputation: 10549

Spring Boot application breaks after upgrade to Apache Derby 10.15 -- why?

During a round of SOUP upgrades in a Spring Boot application, I bumped Apache Derby from 10.14.1.0 to 10.15.1.3. Now the tests fail with this beauty (snipped, full stacktrace here):

Failed to load ApplicationContext
java.lang.IllegalStateException: Failed to load ApplicationContext
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: 
    Error creating bean with name 'org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaConfiguration': 
        Unsatisfied dependency expressed through constructor parameter 0
Caused by: org.springframework.beans.factory.BeanCreationException: 
    Error creating bean with name 'dataSource': 
        Invocation of init method failed
Caused by: java.lang.IllegalStateException: 
    Failed to replace DataSource with an embedded database for tests. 
    If you want an embedded database please put a supported one on the 
    classpath or tune the replace attribute of @AutoConfigureTestDatabase.

What is going here? Do I need to change any configuration?

Upvotes: 1

Views: 285

Answers (2)

Thomas Carlisle
Thomas Carlisle

Reputation: 191

I just want to answer with what it took me to get Derby 15.2.0 to work with Spring Boot 2.4.4 with derby in embedded mode, on top of Java 11. Spring Boot 2.4.4 works out of the box with Derby 14, although you will get some warning as spring boot starts. Upgrading apache derby to 15.2.0 fixed that for me.

In pom, both derby and derbytools dependencies defined:

    <dependency>
        <groupId>org.apache.derby</groupId>
        <artifactId>derby</artifactId>
        <version>10.15.2.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.derby</groupId>
        <artifactId>derbytools</artifactId>
        <version>10.15.2.0</version>
    </dependency>

Then in your apps properties file:

spring.datasource.driver-class-name=org.apache.derby.iapi.jdbc.AutoloadedDriver

Instead of: spring.datasource.driver-class-name=org.apache.derby.jdbc.EmbeddedDriver

After that, I now get a good startup of Spring Boot with no warnings or anything that raises concerns.

Upvotes: 0

Raphael
Raphael

Reputation: 10549

Apache Derby requires Java 9 from 10.15.x on which Spring Boot does currently not support.

See also spring-boot#16433.

Upvotes: 1

Related Questions