2012ǯ12��07��

Java�Υǡ����١����ޥ����졼�����ġ����Flyway�� #JJUG

Java Advent Calendar 2012 7���ܤǤ���

������@megascus����Ρ�Java Bug Database ���Ȥ��Ƥ��ޤ������פǤ�����

���������ҥ����ӥ���Java�Υǡ����١����ޥ����졼�����ġ����Flyway�פ�Ƴ�����Ƥߤ��Ȥ������ʤ��ʤ��������ä��ΤǾҲ𤷤ޤ���



��������

�ޤ����ޥ����졼�������оݤˤʤ�ǡ����١������Ѱդ��ޤ���

���Υ���ȥ꡼�Ǥϡ�MySQL 5.5.28��ȤäƤ��ޤ���


CREATE DATABASE flywayexample DEFAULT CHARACTER SET UTF8;

Flyway��ץ��������Ȥ��Ȥ߹���

�ɥ�����Ȥˤ���Flyway�����Ѥ���ˤϰʲ���3�Ĥμ��ʤ�����褦�Ǥ���

����ϡ�Maven Plugin��Ȥä�������ˡ��Ҳ𤷤ޤ���

Maven��Flyway�����Ѥ���ˤϡ�flyway-maven-plugin��ɬ�פǤ���pom.xml������ϰʲ����̤�Ǥ���

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.ryu22e.flywayexample</groupId>
  <artifactId>flywayexample</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <description>Example for flyway(http://flywaydb.org/).</description>
  <build>
      <plugins>
          <!-- flyway-maven-plugin������ -->
          <plugin>
            <groupId>com.googlecode.flyway</groupId>
            <artifactId>flyway-maven-plugin</artifactId>
            <version>2.0.2</version>
            <configuration>
                <driver>com.mysql.jdbc.Driver</driver>
                <url>jdbc:mysql://localhost:3306</url>
                <initialDescription>Base Migration</initialDescription>
                <schemas>
                    <schema>flywayexample</schema>
                </schemas>
            </configuration>
          </plugin>
      </plugins>
  </build>
  <dependencies>
      <dependency>
          <groupId>com.googlecode.flyway</groupId>
          <artifactId>flyway-core</artifactId>
          <version>2.0</version>
      </dependency>
      <dependency>
          <groupId>mysql</groupId>
          <artifactId>mysql-connector-java</artifactId>
          <version>5.1.21</version>
      </dependency>
  </dependencies>
</project>

�ǡ����١�������³���뤿��Υ桼����̾���ѥ���ɤ�pom.xml�˽񤤤Ƥ��ޤ���

�񤯤��Ȥ�Ǥ���ΤǤ���������ϡ�$M2_HOME/.m2/settings.xml �˽񤤤��桼����̾���ѥ���ɤ򻲾Ȥ�����ˡ�Ǥ�äƤߤޤ���

$M2_HOME/.m2/settings.xml ������ϰʲ����̤�Ǥ���


<settings xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
  <servers>
    <server>
        <id>flyway-db</id> 
        <username>username</username>
        <password>yourpassword</password>
    </server>
  </servers>
</settings>

�ǥե���ȤǤ�ID��flyway-db�פΥ����С��򻲾Ȥ��ޤ���ID���ѹ�����������pom.xml��


      <plugins>
          <plugin>
            <groupId>com.googlecode.flyway</groupId>
            <artifactId>flyway-maven-plugin</artifactId>
            <version>2.0.2</version>
            <configuration>
                <!-- ������ID������� -->
                <serverId>example-db</serverId>
            </configuration>
          </plugin>
      </plugins>

�Τ褦�����ꤷ�ޤ���

ư���ǧ

�ޤ��ǽ�ˡ�Flyway��ư���ǧ�򤷤Ƥߤޤ��礦��mvn flyway:info �ǰʲ��Υ�å����������Ϥ����С�Flyway�������ư��Ƥ��ޤ���


[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building flywayexample 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- flyway-maven-plugin:2.0.2:info (default-cli) @ flywayexample ---
[INFO] +-------------+------------------------+---------------------+---------+
[INFO] | Version     | Description            | Installed on        | State   |
[INFO] +-------------+------------------------+---------------------+---------+
[INFO] | No migrations found                                                  |
[INFO] +-------------+------------------------+---------------------+---------+
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.511s
[INFO] Finished at: Sun Dec 02 21:18:09 JST 2012
[INFO] Final Memory: 4M/81M
[INFO] ------------------------------------------------------------------------

Flyway������

����Flyway�ν�������Ԥ��ޤ���mvn flyway:init ��¹Ԥ��ޤ���


[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building flywayexample 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- flyway-maven-plugin:2.0.2:init (default-cli) @ flywayexample ---
[INFO] Creating Metadata table: `flywayexample`.`schema_version`
[INFO] Schema initialized with version: 0
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.148s
[INFO] Finished at: Sun Dec 02 21:20:20 JST 2012
[INFO] Final Memory: 4M/81M
[INFO] ------------------------------------------------------------------------

schema_version�Ȥ����ơ��֥뤬�������졢�ǽ�ΥС�������ֹ�ʥǥե���ȤǤ�0�ˤ���Ͽ����ޤ���

�⤦����mvn flyway:info ��¹Ԥ���ȡ����ߤΥС�����󤬳�ǧ�Ǥ��ޤ���


[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building flywayexample 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- flyway-maven-plugin:2.0.2:info (default-cli) @ flywayexample ---
[INFO] +-------------+------------------------+---------------------+---------+
[INFO] | Version     | Description            | Installed on        | State   |
[INFO] +-------------+------------------------+---------------------+---------+
[INFO] | 0           | Base Migration         | 2012-12-02 21:20:20 | Future  |
[INFO] +-------------+------------------------+---------------------+---------+
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.625s
[INFO] Finished at: Sun Dec 02 21:23:01 JST 2012
[INFO] Final Memory: 4M/81M
[INFO] ------------------------------------------------------------------------

�ǽ��SQL���������

�Ǥϡ��С������1�Ȥ��ơ��ơ��֥��������Ƥߤޤ��礦��

���饹�ѥ����̤äƤ�����ˡ�db/migration �ե��������������ʲ������Ƥ�V1__Create_book.sql �ե������������ޤ���

CREATE TABLE `book`(
    `id` mediumint NOT NULL AUTO_INCREMENT,
    `title` varchar(255) NOT NULL,
    PRIMARY KEY (`id`)
) ENGINE=InnoDB;

���������顢mvn compile flyway:migrate ��¹Ԥ��ޤ���


[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building flywayexample 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- flyway-maven-plugin:2.0.2:migrate (default-cli) @ flywayexample ---
[INFO] Current schema version: 0
[INFO] Migrating to version 1
[INFO] Successfully applied 1 migration (execution time 00:00.148s).
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.756s
[INFO] Finished at: Sun Dec 02 21:32:29 JST 2012
[INFO] Final Memory: 4M/81M
[INFO] ------------------------------------------------------------------------

����ǡ��������ơ��֥뤬�������줿�Ϥ��Ǥ���mvn flyway:info �dz�ǧ���Ƥߤޤ��礦��


[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building flywayexample 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- flyway-maven-plugin:2.0.2:info (default-cli) @ flywayexample ---
[INFO] +-------------+------------------------+---------------------+---------+
[INFO] | Version     | Description            | Installed on        | State   |
[INFO] +-------------+------------------------+---------------------+---------+
[INFO] | 0           | Base Migration         | 2012-12-02 21:20:20 | Missing |
[INFO] | 1           | Create book            | 2012-12-02 21:32:29 | Success |
[INFO] +-------------+------------------------+---------------------+---------+
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.567s
[INFO] Finished at: Sun Dec 02 21:34:35 JST 2012
[INFO] Final Memory: 4M/81M
[INFO] ------------------------------------------------------------------------

�С������1���ѹ�����Ƥ��ޤ���MySQL��ˡ��������ơ��֥�book����������ޤ�����

Flyway�Ǥϡ��ե�����̾��ʲ���̿̾����˽��ä���Τˤ���ȡ��ޥ����졼������оݤ�SQLʸ�Ȥ��Ƽ�ưǧ�����Ƥ���ޤ���

51

Placefolder

��Placefolder�פ�SQLʸ��ưŪ���ͤ������ळ�Ȥ�Ǥ��ޤ���

pom.xml ��


      <plugins>
          <!-- flyway-maven-plugin������ -->
          <plugin>
            <groupId>com.googlecode.flyway</groupId>
            <artifactId>flyway-maven-plugin</artifactId>
            <version>2.0.2</version>
            <configuration>
                <placeholders>
                    <tableName>magazine</tableName>
                </placeholders>
            </configuration>
          </plugin>
      </plugins>

�Ƚ񤤤ơ�SQL��


CREATE TABLE `magazine`(
    `id` mediumint NOT NULL AUTO_INCREMENT,
    `title` varchar(255) NOT NULL,
    PRIMARY KEY (`id`)
) ENGINE=InnoDB;

INSERT INTO `${tableName}` (`title`) VALUES ('test1');

�Ƚ񤯤ȡ�mvn compile flyway:migrate �¹Ի���${tableName}��magazine���Ѵ����Ƥ���ޤ���

�ޤ����ʲ��Τ褦�˥��ޥ�ɤΰ����Ȥ���Placefolder����ꤹ�뤳�Ȥ�Ǥ��ޤ���


mvn compile flyway:migrate -Dflyway.placeholders.Placefolder��̾��=��������

��ö���Ƥ������DROP����������

mvn flyway:clean �����Ƥ������DROP����ޤ���

�¹Ԥ���ȡ�����̵�Ѥ�DROP���ޤ���

�¹Ԥ��뤫�ɤ�����ǧ���륪�ץ����Ǥ�ʤ��Τ���Ĵ�٤Ƥߤ��ΤǤ�������������ޤ���Ǥ�����

���ִĶ��Ǥ����¹Ԥ��������Τǡ����Ф˻Ȥ�ʤ��Ǥ���������

�ʤޤ���SSH��ľ�ܥޥ����졼������¹Ԥ���褦�ʱ��Ѥˤ��ʤ���CI���Ȥ߹���Τ����ۤʤΤǤ��礦���ġ�

Java���饹�ǥޥ����졼�����

SQL�ե���������Ǥʤ���Java���饹�ǥޥ����졼����󤹤뤳�Ȥ�Ǥ��ޤ���

�ѥå�����db.migration�β���SQL�ե������Ʊ��̿̾����ǡ�com.googlecode.flyway.core.api.migration.jdbc.JdbcMigration��implement������Java���饹����ȡ��ޥ����졼������оݤȤ���ǧ�����Ƥ���ޤ���


package db.migration;

import java.sql.Connection;
import java.sql.PreparedStatement;

import com.googlecode.flyway.core.api.migration.jdbc.JdbcMigration;

public class V2__Insert_into_magazine implements JdbcMigration {

    public void migrate(Connection connection) throws Exception {
        PreparedStatement statement =
                connection
                    .prepareStatement("INSERT INTO `magazine` (`title`) VALUES ('sample')");

        try {
            statement.execute();
        } finally {
            statement.close();
        }
    }
}

Java�ϥҥ��ɥ�����Ȥ��ʤ��Τǡ�����ä�ʣ����SQLʸ�ˤʤ�����˸��񤯤ơ��Ŀ�Ū�ˤϤ��ޤ�Ȥ������Ȥϻפ�ʤ��ΤǤ�����forʸ�����̤˥ǡ���������������ʤɤ��������⤷��ޤ���

�Ǹ��

��Ƭ�Ǥ⿨�줿�褦�ˡ�Flyway�����ҥ����ӥ��˺Ƕ�Ƴ�������ΤǤ���������Υե졼������O/R�ޥåѡ��˰�¸������ΤǤϤʤ��Τǡ��ä��礭���Ȥ�ɤ����⤢��ޤ���Ǥ�����

����Ҳ𤷤��ΤϤۤ�ο���ǡ���äȹⵡǽ�ʥġ���ʤΤǤ���������äȻ�˿��äƤߤ����٤ʤ��ñ������Ǥ���ġ���Ǥ����ǡ����١����ޥ����졼�����ġ����Ƴ����Ƥ����Ƥ������ϻ�ƤߤƤϤ������Ǥ��礦����

�����ϡ�@empressia����Ǥ���



ryu22e at 00:00��������(0)���ȥ�å��Хå�(0)���ץ������ | Java 

�ȥ�å��Хå�URL

�����Ȥ���

̾��
 
  ³¨Ê¸»ú
 
 
<% for ( var i = 0; i < 7; i++ ) { %> <% } %>
<%= wdays[i] %>
<% for ( var i = 0; i < cal.length; i++ ) { %> <% for ( var j = 0; j < cal[i].length; j++) { %> <% } %> <% } %>
0) { %> id="calendar-1246260-day-<%= cal[i][j]%>"<% } %>><%= cal[i][j] %>
Profile

ryu22e

�ǿ�����
Recent Comments
<%==comments[n].author%>
<% } %>
Categories