概要
私は次の設定で既存のプロジェクトにflyway dbの移行を追加します:
- プロジェクトの種類:Spring Boot
- DB:MariaDB
application-local.yaml(フライウェイとデータソースの設定):
...
flyway:
enabled: true
locations: classpath:db.migration
baselineOnMigrate: true
spring:
jackson:
serialization:
indent_output: true
devtools:
restart:
enabled: false
livereload:
enabled: false
datasource:
type: com.zaxxer.hikari.HikariDataSource
url: jdbc:mariadb://localhost:3306/migration
username: root
password: testing1
hikari:
data-source-properties:
leakDetectionThreshold: 2000
cachePrepStmts: true
prepStmtCacheSize: 250
prepStmtCacheSqlLimit: 2048
useServerPrepStmts: true
jpa:
database-platform: org.hibernate.dialect.MySQL5Dialect
database: MYSQL
show-sql: false
hibernate.id.new_generator_mappings: true
properties:
hibernate.cache.use_second_level_cache: false
hibernate.cache.use_query_cache: false
hibernate.generate_statistics: false
hibernate.hbm2ddl.import_files: schema-mysql.sql
hibernate.hbm2ddl.import_files_sql_extractor: org.hibernate.tool.hbm2ddl.MultipleLinesSqlCommandExtractor
open-in-view: false
hibernate:
ddl-auto: create-drop
naming:
physical-strategy: org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy
implicit-strategy: org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy
...
問題:
アプリケーションが停止すると、dbテーブルは削除されません。しかし、私が使った ddl-auto: create-drop
予想されるテーブルは削除されます。
注意: 私はFlywayを使うのがちょっと奇妙だと思っています揮発性DBです。起動時に初期データを挿入するいくつかの設定クラスがあります。アプリケーションが停止している間にdbが削除されない場合、初期値が既に挿入されているため、次の起動時に[たとえば一意の制約違反]が発生します。
誰かが真の解決策で私を助けることができたら、私は感謝しています。
回答:
回答№1は0ザ 作成ドロップのドキュメント 州:
SessionFactoryの起動時にスキーマを削除し、再作成します。さらに、SessionFactoryのシャットダウン時にスキーマを削除します。
どのようにアプリケーションを停止していますか?私は、あなたがあなたの SessionFactory
アプリケーションを停止すると
おそらく、あなたは /shutdown
あなたのエンドポイント spring-boot
指定されたアプリケーション ここに アプリケーションを正常にシャットダウンする