Приложение Spring Boot прерывается после обновления до Apache Derby 10.15 — почему?

#spring-boot #derby

#весенняя загрузка #дерби

Вопрос:

Во время цикла обновлений SOUP в приложении Spring Boot я перенес Apache Derby с 10.14.1.0 на 10.15.1.3. Теперь тесты завершаются неудачей с этой красотой (обрезанный, полный стек здесь):

 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.
  

Что здесь происходит? Нужно ли мне изменять какую-либо конфигурацию?

Ответ №1:

Для Apache Derby требуется Java 9 с версии 10.15.x, на которой Spring Boot в настоящее время не поддерживается.

См. Также spring-boot # 16433.

Ответ №2:

Я просто хочу ответить, что мне потребовалось, чтобы заставить Derby 15.2.0 работать с Spring Boot 2.4.4 с derby во встроенном режиме поверх Java 11. Весенняя загрузка 2.4.4 работает из коробки с Derby 14, хотя вы получите некоторое предупреждение при запуске весенней загрузки. Обновление apache derby до 15.2.0 исправило это для меня.

В pom определены зависимости derby и derbytools:

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

Затем в файле свойств вашего приложения:

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

Вместо: spring.datasource.driver-class-name=org.apache.derby.jdbc.EmbeddedDriver

После этого я получаю хороший запуск Spring Boot без каких-либо предупреждений или чего-либо, что вызывает беспокойство.