Почему приложение Spring Boot 2.0 не запускает schema.sql?

Пока я использовал Spring Boot 1.5, при запуске приложения Hibernate запускал файл schema.sql, расположенный в папке /Ресурсы, когда была установлена ​​соответствующая конфигурация. После выпуска Spring Boot 2.0 эта функция больше не работает. Я не смог найти ничего об этом изменении в документации. Вот содержимое моего файла application.properties:

spring.datasource.url=...
spring.datasource.username=...
spring.datasource.password=...

#spring.jpa.hibernate.ddl-auto=create-drop
spring.jpa.hibernate.ddl-auto=none
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect

Есть ли какие-то изменения в Spring Boot 2.0 или это ошибка / проблема?

У меня такая же проблема, и ответ ниже не решил ее. Любая идея?

Fabricio 16.10.2018 14:10

ни один из ответов мне не помог :( после обновления весенней загрузки до 2.x база данных перестала автоматически обновлять / создавать новые таблицы

deviant 02.11.2018 17:40
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
36
2
39 095
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

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

Проверить документы здесь.

In a JPA-based app, you can choose to let Hibernate create the schema or use schema.sql, but you cannot do both. Make sure to disable spring.jpa.hibernate.ddl-auto if you use schema.sql.

У вас spring.jpa.hibernate.ddl-auto=create-drop, поэтому schema.sql не запускается. Похоже, именно так работает Spring Boot.

Редактировать

Я думаю, что проблема (на самом деле не проблема) в том, что ваше приложение указывает на экземпляр mysql.

См. текущие свойства Spring Boot:

spring.datasource.initialization-mode=embedded # Initialize the datasource with available DDL and DML scripts.

Значение по умолчанию - embedded - например, инициализировать, только если вы работаете со встроенной базой данных, например H2.

Также см. Ответ Стефана здесь. Он сказал:

Adding spring.datasource.initialization-mode=always to your project is enough.

Итак, попробуйте установить:

spring.datasource.initialization-mode=always

Извини, это моя вина. Даже с spring.jpa.hibernate.ddl-auto=none это не работает. Я только что отредактировал исходный пост.

Đorđe Pržulj 22.03.2018 22:34

Он работает до Spring 2.0, я не знаю, почему его больше нет, но я тоже ищу ответ. Мне просто нужно создать схему для h2 в schema.sql, так как я обновился до 2.0, она перестала работать.

11thdimension 27.03.2018 02:12

@ 11thdimension Похоже, новый основной выпуск Spring Boot не поддерживает его. Было бы неплохо найти это в документации.

Đorđe Pržulj 28.03.2018 11:32

Я уже пробовал, все равно не получилось. Однако это было решено после того, как я исключил зависимость HikariCP, добавленную в Spring Boot 2.

11thdimension 29.03.2018 16:44

@EvgeniDimitrov Ответ правильный, но в моем случае он переходит в некоторый циклический цикл зависимостей, как показано здесь

charle819 13.08.2018 11:14

Не встроено (например, MySQL)

Если вы загружаете базу данных не встроен, в Spring Boot 2 вам необходимо добавить:

spring.datasource.initialization-mode=always

Проверьте Руководство по миграции:

Database Initialization

Basic DataSource initialization is now only enabled for embedded data sources and will switch off as soon as you’re using a production database. The new spring.datasource.initialization-mode (replacing spring.datasource.initialize) offers more control.


Встроенный (например, h2)

Однажды у меня была аналогичная проблема, хотя это был h2 (так что было - встроенная БД), моя конфигурация h2 была активирована профилем my-test.

Мой тестовый класс был таким:

@RunWith(SpringRunner.class)
@SpringBootTest                     // does not work alone
@ActiveProfiles("my-test")
public class MyEntityRepositoryTest {

Проблема только в @SpringBootTestне инициализировал тестовую базу данных. Пришлось использовать либо @DataJpaTest, либо @SpringBootTest + @AutoConfigureTestDatabase. Примеры

@RunWith(SpringRunner.class)
@DataJpaTest                       // works
@ActiveProfiles("sep-test")
public class MyEntityRepositoryTest {

или же

@RunWith(SpringRunner.class)
@SpringBootTest                     // these two
@AutoConfigureTestDatabase          // together work
@ActiveProfiles("sep-test")
public class MyEntityRepositoryTest {

У меня работает нормально, можете попробовать. Вместо HikariCP установите желаемый тип источника данных.

spring.datasource.initialization-mode=always
spring.datasource.type=com.mysql.jdbc.jdbc2.optional.MysqlDataSource
spring.jpa.hibernate.ddl-auto=none

Другая проблема может привести к тому, что data.sql не может быть выполнен, если вы не сконфигурируете spring.jpa.hibernate.ddl-auto=none, data.sql не будет выполняться d.

Я смог запустить приложение только после такого исключения Hikary CP:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
    <exclusions>
        <exclusion>
            <groupId>com.zaxxer</groupId>
            <artifactId>HikariCP</artifactId>
        </exclusion>
    </exclusions>
</dependency>

См. Вопрос здесь

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