Springで初期データをdata.sqlで投入する方法
data.sqlというファイルをsrc/main/resources配下に置くことでSpring起動時にデータをテーブルにインサートすることができます。
但し、application.yamlの設定が必要です。
initialization-mode: always
が必要です。
※Spring Boot 2.5.0からはspring.sql.init.modeで指定する
ddl-auto: create
とすることで、アプリを終了してもデータがインサートされたままとなります。
spring: datasource: initialization-mode: always url: jdbc:mysql://localhost:3306/ginkou?serverTimezone=UTC username: root password: system driver-class-name: com.mysql.cj.jdbc.Driver jpa: database: MYSQL hibernate: ddl-auto: create
ddl-auto: create-drop
とすると、アプリ終了時にテーブルがdropされてしまいます。
ddl-auto: update
とすると、テーブルがcreateされたりdropされない為、既にデータが存在する場合は、初期データ投入のinsert文で重複キーでエラーとなってしまいます。(Duplicate entry ‘1’ for key ‘PRIMARY’)
Duplicate keyのエラーを回避したい場合はinsert文をON CONFLICT ~ DO NOTHING;
を使用したりしておけば大丈夫です。
また、flywayやliquibaseなどのDBマイグレーションツールを使う手もありです。
insertした初期データが日本語が文字化けする場合
これは、data.sqlをutf-8で保存することで解決できます。
KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント