Spring Boot 1.5を使用していたときに、アプリケーションの起動時にHibernateがschema.sql適切な構成が設定されているときに/ resourcesフォルダーにあるファイルを実行しました。 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に何らかの変更がありますか、それともバグ/問題ですか?
ドキュメントを確認してください こちら 。
JPAベースのアプリでは、Hibernateにスキーマを作成させるかschema.sqlを使用させるかを選択できますが、両方を行うことはできません。 schema.sqlを使用する場合は、spring.jpa.hibernate.ddl-autoを必ず無効にしてください。
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などの埋め込みデータベースを実行している場合にのみ初期化します。
また、Stephan here の回答もご覧ください。彼は言った:
Spring.datasource.initialization-mode = alwaysをプロジェクトに追加するだけで十分です。
だから設定してみてください:
spring.datasource.initialization-mode=always
not embeddedであるデータベースをロードする場合、Spring Boot 2で以下を追加する必要があります。
spring.datasource.initialization-mode=always
移行ガイド を確認してください:
データベースの初期化
基本的なデータソースの初期化は、埋め込みデータソースに対してのみ有効になり、運用データベースを使用するとすぐにオフになります。新しい
spring.datasource.initialization-mode
(spring.datasource.initialize
を置き換える)は、より多くの制御を提供します。
H2であったにもかかわらずwas組み込みDBであったにもかかわらず、私はかつて同様の問題を抱えていました。私のh2構成はmy-test
プロファイル。
私のテストクラスは次のようなものでした:
@RunWith(SpringRunner.class)
@SpringBootTest // does not work alone
@ActiveProfiles("my-test")
public class MyEntityRepositoryTest {
問題は@SpringBootTest
だけdがテストデータベースを初期化していないことです。 @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 {
そのような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>
問題をご覧ください こちら
それは私のためにうまくいきます、あなたはそれを試すことができます。データソースのタイプを、HikariCPの代わりに好きなものに設定します。
spring.datasource.initialization-mode=always
spring.datasource.type=com.mysql.jdbc.jdbc2.optional.MysqlDataSource
spring.jpa.hibernate.ddl-auto=none
spring.jpa.hibernate.ddl-auto=none
を設定しないと、data.sqlが実行されないというdata.sqlを実行できないという別の問題があります。