LoginSignup
3
3

More than 5 years have passed since last update.

【メモ】Dropwizardのmigrationでmigration.xmlファイルを指定する

Last updated at Posted at 2015-02-25

概要

migrationファイル(changelogファイル)を指定して使いたい
(デフォルトだとsrc/main/resources/migrations.xmlを使う)

コード

jp.hoge.HogeApiConfiguration.java

package jp.hoge;

import javax.validation.Valid;
import javax.validation.constraints.NotNull;

import org.hibernate.validator.constraints.NotEmpty;

import com.fasterxml.jackson.annotation.JsonProperty;

import io.dropwizard.Configuration;
import io.dropwizard.db.DataSourceFactory;

public class HogeConfiguration extends Configuration {

  @Valid
  @NotNull
  @JsonProperty
  private DataSourceFactory databaseHoge = new DataSourceFactory();

  public DataSourceFactory getHogeDataSourceFactory() {
    return databaseHoge;
  } 
}

package jp.hoge;

import org.skife.jdbi.v2.DBI;

import io.dropwizard.Application;
import io.dropwizard.db.DataSourceFactory;
import io.dropwizard.jdbi.DBIFactory;
import io.dropwizard.migrations.MigrationsBundle;
import io.dropwizard.setup.Bootstrap;
import io.dropwizard.setup.Environment;

public class HogeApplication extends Application<HogeConfiguration> {

  public static void main(String[] args) throws Exception {
    new HogeApplication().run(args);
  }

  @Override
  public String getName() {
    return "hoge";
  }

  @Override
  public void initialize(Bootstrap<HogeConfiguration> bootstrap) {
    bootstrap.addBundle(new MigrationsBundle<HogeConfiguration>() {
      @Override
      public DataSourceFactory getDataSourceFactory(HogeConfiguration configuration) {
        return configuration.getHogeDataSourceFactory();
      }
    });
  }

  @Override
  public void run(HogeConfiguration configuration,Environment environment) throws Exception {

  }
}

/home/hoge/hoge_config.yml
databaseHoge:
  driverClass: com.mysql.jdbc.Driver
  user: hoge_user
  password: hogepassword
  url: jdbc:mysql://127.0.0.1:3306/hoge
  properties:
    charSet: UTF-8
/home/hoge/hoge_migration.yml
<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog
        xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
         http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.0.xsd">

    <changeSet id="1" author="y.hogetaro">
        <createTable tableName="messages">
            <column name="id" type="int(11)" autoIncrement="true">
                <constraints primaryKey="true" nullable="false"/>
            </column>
            <column name="name" type="varchar(64)">
                <constraints nullable="false"/>
            </column>
        </createTable>
    </changeSet>

実行コマンド

# dry-run
java -jar hoge-1.0.jar db migrate /home/hoge/hoge_config.yml --migrations /home/hoge/hoge_migration.yml --dry-run

注意点

includeの使い方

--migrationsで指定しないでデフォルトのままsrc/main/resources/migrations.xmlを使っていれば相対パスでもincludeを認識してくれたけど、--migrationsでchangelogファイルを指定すると、includeのファイルもフルパスで指定してあげないとダメっぽい。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3