Spring Boot не может запустить schema.sql с зависимостью от spring-cloud-starter-config

Мое приложение spring boot 2.0 распознает и запускает schema.sql для инициализации моей встроенной базы данных h2. Но когда я добавляю зависимость spring-cloud-starter-config, приложение больше не запускает schema.sql. Чтобы проиллюстрировать это, используйте Spring Initializr для создания приложения Spring Boot 2 (v2.0.1) с зависимостями от:

  • сеть
  • остальные репозитории
  • JPA
  • h2
  • клиент конфигурации

Добавить объект:

package com.example.demo;

import javax.persistence.*;

@Entity
public class Room {
    @Id
    @Column(name = "ROOM_ID")
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;

    @Column
    private String name;

//...getters and setters

}

Репозиторий для объекта:

package com.example.demo;

import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface RoomRepository extends CrudRepository<Room, Long> {

}

Основной класс не изменился по сравнению с тем, что сгенерировал initializr:

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

Добавьте файлы schema.sql и data.sql в базовую папку ресурсов. Они используются Spring Boot для создания и заполнения базовой таблицы для объекта:

schema.sql:

CREATE TABLE ROOM(
    ROOM_ID BIGINT AUTO_INCREMENT PRIMARY KEY,
    NAME VARCHAR(16) NOT NULL,
);

data.sql:

INSERT INTO ROOM (NAME) VALUES ('Piccadilly');
INSERT INTO ROOM (NAME) VALUES ('Cambridge');
INSERT INTO ROOM (NAME) VALUES ('Oxford');
INSERT INTO ROOM (NAME) VALUES ('Manchester');

Замените пустой application.properties этим application.yml:

spring:
  jpa:
    hibernate.ddl-auto: none

Теперь запустите приложение и перейдите к http: // localhost: 8080 / комнаты. Приложение завершится ошибкой с JdbcSQLException, показывающим, что таблица не существует:

org.h2.jdbc.JdbcSQLException: Table "ROOM" not found; SQL statement: select room0_.room_id as room_id1_0_, room0_.name as name2_0_ from room room0_

Теперь перейдите в pom.xml и закомментируйте ссылку на зависимость spring-cloud-starter-config:

<!--
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-config</artifactId>
</dependency>
-->

Перезагрузите приложение, и теперь все работает! Откройте http: // localhost: 8080 / комнаты в своем браузере, и вы обнаружите, что возвращается ожидаемый результат JSON (с 4 строками). Это говорит мне, что именно зависимость spring-cloud-starter-config не позволила Spring выполнить schema.sql и data.sql для инициализации базы данных.

Как я могу заставить Spring Boot выполнять файлы schema.sql и data.sql, когда я использую зависимость Spring Cloud?

вы можете опубликовать свой основной класс?

fingerprints 23.04.2018 17:27

Добавлен основной класс. Он не изменился по сравнению с тем, что сгенерировал initialzr.

Tony B 23.04.2018 17:34

Я тоже столкнулся с этим. См. Комментарий github.com/spring-cloud/spring-cloud-security/issues/143

Dave G 27.04.2018 14:20
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
4
3
681
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

У меня была аналогичная проблема, но во время выполнения тестов с созданием схемы базы данных H2. Я только что пробовал более новые версии - spring-boot-starter-parent:2.0.2.RELEASE и Finchley.RC2 для Spring Cloud, и в моем случае это работает.

Потратил несколько минут на ваш пример - воспроизводится с Spring Boot 2.0.1 и Spring Cloud Finchley.RC1, но отлично работает с 2.0.2 и Finchley.RC2. Мне не удалось найти проблему с github, но похоже, что она исправлена.

Последняя работает и у меня. Использование Finchley.RC2 И spring-boot-starter-parent:2.0.3.RELEASE.

Tony B 14.06.2018 23:32

Другие вопросы по теме