Skip to content
irof edited this page Aug 10, 2020 · 6 revisions

実行例

SpringBoot + H2Database での実行例です。

  • テストコード
  • アプリケーションリスナー
  • Flyway

テストコード

テストを実行すると出ます。マイグレーションのテストと言い張ってもいいかもしれません。私は起動テストに入れています。

  1. @SpringBootTestDataSourceを受け取るテストを作成する
  2. テストを実行する
import jig.erd.JigErd;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import javax.sql.DataSource;

@SpringBootTest
public class ErdTest {

    @Test
    void run(@Autowired DataSource dataSource) {
        JigErd.run(dataSource);
    }
}

アプリケーションリスナーで実行する

アプリケーションを起動すると出ます。ローカルとか開発時専用。本番でやることはないと思います。

  1. JigErdを継承したApplicationListenerを作成する
  2. アプリケーションを起動する
package sample;

import jig.erd.JigErd;
import org.springframework.boot.context.event.ApplicationStartedEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;

import javax.sql.DataSource;

@Component
public class JigErdListener extends JigErd implements ApplicationListener<ApplicationStartedEvent> {

    public JigErdListener(DataSource dataSource) {
        super(dataSource);
    }

    @Override
    public void onApplicationEvent(ApplicationStartedEvent event) {
        run();
    }
}

Flywayで出力する

以下は R__ でやっていますが、マイグレーションの間に挟んだらその時のダイアグラムが出せます。嬉しいかどうかは知らない。

  1. Java-based migrationを作成する
  2. マイグレーションを実行する
package db.migration;

import jig.erd.JigErd;
import org.flywaydb.core.api.migration.BaseJavaMigration;
import org.flywaydb.core.api.migration.Context;
import org.springframework.jdbc.datasource.SingleConnectionDataSource;

import javax.sql.DataSource;

public class R__JigErd extends BaseJavaMigration {

    @Override
    public void migrate(Context context) {
        DataSource dataSource = new SingleConnectionDataSource(context.getConnection(), true);
        new JigErd(dataSource).run();
    }
}