IT初学者部

プログラミングに関することを中心に、備忘録として残していきます。

Springbootの「Schema.sql」によるスキーマ生成を利用してみる

はじめに

個人開発ではあまり気にすることはありませんが、複数人の開発作業や大規模開発の際には、開発時に個々人の環境に違いなどが生じないよう、開発環境をきっちり構築させると思います。

今回行いたいのは、Schema.sqlを利用して各個人の開発環境に構築されるDBの定義を共通のものにするための処理です。

そもそも個人開発の場合でもいちいちDB作ったりなんだかんだするのは面倒なので、開発する際には極力労力を減らす、正確性を上げるために自動生成できる箇所は自動生成してしまうというのが正しいと思います。

ということでSprintboot利用時にschema.sqlを利用してテーブルを構築してみましょう。

前準備

application.propertiesに以下のような記述をし、構築先のDBを設定しましょう。

spring.datasource.driver-class-name=org.postgresql.Driver
spring.datasource.url=jdbc:postgresql://localhost:5432/(データベースの名前)
spring.datasource.username=(ユーザー名)
spring.datasource.password=(パスワード)

今回はPostgreSQLを利用します。こんな感じで接続先DBを設定します。

schema.sqlの編集

schema.sqlファイルを編集しましょう。

まず、schema.sqlを配置するパスについてです。「src/main/resources」配下に配置してください。

schema,.sqlの編集についてですが、ここに記載したSQLがSpringboot起動時に実行されます。

テーブル定義をしっかり決め、以下のように記述してみましょう。

create table if not exists account( 
    id serial not null
    , username varchar (255) not null
    , password varchar (255) not null
    , mail_address varchar (255) not null
    , first_date timestamp
    , last_date timestamp
    , version int not null
    , primary key(id)
);

アカウント情報を保管するためのテーブルです。定義についてはちゃんと自分で作成しましょう。(これも本当はどこかのフォーマット(エクセルなど)に記載し、そこから取得してschema.sqlを自動生成するような物を作りたいですが。。。今回ははしょります。

create文なのでなんのことはありませんが、 if not exists ~が必要です。これは、Springboot起動ごとに毎回テーブル作成を行おうとしてしまうのですが、存在しない場合のみ作成と条件をつけることで、起動時のSQLエラーを回避できます。

実行してみます

これを作成したところで実行してみましょう。eclipseでSpringbootアプリケーションとして実行します。

ありゃ?

…。

ググってみたところ、いくつかこんな記事を見つけました。

SpringBootでschema.sqlが実行されなかった原因

【Spring Boot】Spring JDBCでschema.sqlを使ったテーブル作成ができない場合の対処 - 未経験35歳から始めるプログラミング

ということなので、application.propertiesに以下の記述を追加して再度実行してみます。

spring.sql.init.mode=always

一応こんな感じでテーブルの作成が確認できればOKです。

また、exists not の文をつけているため、何度起動しても一度しか生成されません。

こんな感じでschema.sqlにCREATE文を追加していくことで開発時にここの環境の共有ができるようになります。

おわりに

日に日に忙しくなりブログ更新頻度が下がってきてしまいました。