Мое приложение spring boot 2.0 распознает и запускает schema.sql для инициализации моей встроенной базы данных h2. Но когда я добавляю зависимость spring-cloud-starter-config, приложение больше не запускает schema.sql. Чтобы проиллюстрировать это, используйте Spring Initializr для создания приложения Spring Boot 2 (v2.0.1) с зависимостями от:
Добавить объект:
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?
Добавлен основной класс. Он не изменился по сравнению с тем, что сгенерировал initialzr.
Я тоже столкнулся с этим. См. Комментарий github.com/spring-cloud/spring-cloud-security/issues/143




У меня была аналогичная проблема, но во время выполнения тестов с созданием схемы базы данных 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.
вы можете опубликовать свой основной класс?