Почему приложение Spring Boot 2.0 не запускает схему.в SQL?
пока я использовал Spring Boot 1.5, при запуске приложения Hibernate выполняется схемы.в SQL расположенном в /ресурсов при необходимости настройки. После выпуска Spring Boot 2.0 эта функция больше не работает. Я не смог найти ничего об этом изменении в документации. Вот мой приложение.свойства файл содержимое:
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 или это ошибка/проблема?
4 ответов
проверка документов здесь.
в приложении на основе JPA вы можете позволить Hibernate создать схему или использовать схемы.SQL, но вы не можете сделать оба. Обязательно отключите весна.jpa.зимовать.ddl-auto при использовании схемы.язык SQL.
вы spring.jpa.hibernate.ddl-auto=create-drop
вот почему schema.sql
не исполнено.
Похоже, так работает Spring Boot.
редактировать
Я думаю, что проблема(не проблема) заключается в том, что ваше приложение указывает на экземпляр mysql.
посмотреть текущие свойства весенней загрузки:
spring.datasource.initialization-mode=embedded # Initialize the datasource with available DDL and DML scripts.
значение по умолчанию:embedded
- например, инициализировать, только если вы используете и встроенную базу данных, например H2.
Также см. ответ Стефан здесь. Он сказал:--8-->
добавление весны.источник.initialization-mode=всегда для вашего проекта достаточно.
поэтому попробуйте set:
spring.datasource.initialization-mode=always
не встроенный (например, MySQL)
при загрузке базы данных,не встроен, в Spring Boot 2 вам нужно добавить:
spring.datasource.initialization-mode=always
Регистрация Руководство По Миграции:
Инициализация Базы Данных
базовая инициализация источника данных теперь доступна только для встроенных данных источники и выключится, как только вы используете производства база данных. Новый
spring.datasource.initialization-mode
(заменаspring.datasource.initialize
) предлагает больше контроля.
встроенный (например, h2)
у меня когда-то была аналогичная проблема, хотя это был h2 (так что это был встроенный DB), моя конфигурация 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
есть еще одна проблема может привести данных.sql не может быть выполнен, если вы не настроите spring.jpa.hibernate.ddl-auto=none
,что данные.sql не будет выполняться d.