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

<p>когда я использовал spring boot 1.5, при запуске приложения hibernate выполнял<em> schema.sql </em>файл, расположенный в папке<em>/resources </em>, когда установлена соответствующая конфигурация. после релиза spring boot 2.0 эта функция больше не работает. я не смог найти ничего об этом изменении в документации . вот мой<em> application.properties </em>содержимое файла:</p><pre><code>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 </code></pre><p>есть ли какие-то изменения в spring boot 2.0 или это ошибка/проблема?</p>

<p>проверьте документы <a href="https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto-initialize-a-database-using-spring-jdbc">здесь</a> . </p><blockquote> <p>в приложении на основе jpa вы можете разрешить hibernate создавать схему или используйте schema.sql, но вы не можете сделать оба. обязательно отключите spring.jpa.hibernate.ddl-auto, если вы используете schema.sql.</p> </blockquote><p>у вас есть <code>spring.jpa.hibernate.ddl-auto=create-drop</code>, поэтому <code>schema.sql</code> не выполняется . похоже, именно так работает spring boot.</p><p><strong>правка</strong></p><p>я думаю, что проблема (на самом деле не проблема) заключается в том, что ваше приложение указывает на экземпляр mysql. </p><p>смотрите <a href="https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html">текущие свойства spring boot</a> :</p><pre><code>spring.datasource.initialization-mode=embedded # initialize the datasource with available ddl and dml scripts. </code></pre><p>значением по умолчанию является <code>embedded</code> - например, инициализируйте, только если вы используете встроенную базу данных, например, h2.</p><p>также см. ответ стефана <a href="https://github.com/spring-projects/spring-boot/issues/12612">здесь</a> . он сказал:</p><blockquote> <p>добавление spring.datasource.initialization-mode = всегда в ваш проект - это довольно.</p> </blockquote><p>поэтому попробуйте установить:</p><pre><code>spring.datasource.initialization-mode=always </code></pre>

<h1>не встроен (например, mysql)</h1><p>если вы загружаете базу данных, которая является <strong>не встроенной</strong>, в spring boot 2 вам необходимо добавить:</p><pre><code>spring.datasource.initialization-mode=always </code></pre><p>проверьте <a href="https://github.com/spring-projects/spring-boot/wiki/spring-boot-2.0-migration-guide#database-initialization">руководство по миграции</a> :</p><blockquote> <h1>инициализация базы данных</h1> <p>базовая инициализация источника данных теперь включена только для встроенных данных источники и отключится, как только вы используете производство база данных. новый <code>spring.datasource.initialization-mode</code> (заменяющий <code>spring.datasource.initialize</code>) предлагает больше контроля.</p> </blockquote><hr><h1>встроенный (например, h2)</h1><p>когда-то у меня была похожая проблема, хотя это был h2 (то есть <strong>был</strong> встроенной бд), моя конфигурация h2 была активирована профилем <code>my-test</code>.</p><p>мой тестовый класс был похож на:</p><pre><code>@runwith(springrunner.class) @springboottest // does not work alone @activeprofiles("my-test") public class myentityrepositorytest { </code></pre><p>проблема в том, что <code>@springboottest</code>только <strong>не инициализировал тестовую базу данных</strong>. мне пришлось использовать <code>@datajpatest</code> или <code>@springboottest</code> + <code>@autoconfiguretestdatabase</code>. примеры</p><pre><code>@runwith(springrunner.class) @datajpatest // works @activeprofiles("sep-test") public class myentityrepositorytest { </code></pre><p>или же</p><pre><code>@runwith(springrunner.class) @springboottest // these two @autoconfiguretestdatabase // together work @activeprofiles("sep-test") public class myentityrepositorytest { </code></pre>

<p>я смог запустить приложение только после исключения hikary cp следующим образом:</p><pre><code><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> </code></pre><p>пожалуйста, посмотрите проблему здесь: <a href="https://github.com/spring-cloud/spring-cloud-security/issues/143">https://github.com/spring-cloud/spring-cloud-security/issues/143</a> </p>

<p>это прекрасно работает для меня, вы можете попробовать. установите тип источника данных на то, что вам нравится вместо hikaricp.</p><pre><code>spring.datasource.initialization-mode=always spring.datasource.type=com.mysql.jdbc.jdbc2.optional.mysqldatasource spring.jpa.hibernate.ddl-auto=none </code></pre>

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