1

flyway-maven-plugin でいくつかの実験を行います。私は空のデータベースを持っていないので、最初の ddl スクリプトが必要です。Flyway wiki の指示に従います。

V1__Base_Migration.sqlという名前の SQL スクリプトをsrc/main/resources/db/migrationに配置しました。

flyway-maven-plugin の構成は次のようになります。

<build>
    <plugins>
        <plugin>
            <groupId>com.googlecode.flyway</groupId>
            <artifactId>flyway-maven-plugin</artifactId>
            <version>1.7</version>
            <configuration>
                <driver>org.hsqldb.jdbcDriver</driver>
                <url>jdbc:hsqldb:hsql://localhost:9001/testdb</url>
                <user>SA</user>
                <password></password>
                <schemas>PUBLIC</schemas>
                <initialVersion>1</initialVersion>
                <initialDescription>Base Migration</initialDescription>
            </configuration>
        </plugin>
    </plugins>
</build>

cmdを呼び出しmvn install flyway:initてデータベースで実行を確認すると、flyway のバージョン テーブルは見つかりますが、sql スクリプトに ddl があるテーブルは見つかりません。

Maven のデバッグ ログを見ると、SQL スクリプトが実行されたというヒントが見つかりません。

[DEBUG]   Excluded: classworlds:classworlds:jar:1.1
[DEBUG] Configuring mojo com.googlecode.flyway:flyway-maven-plugin:1.7:init from   plugin realm ClassRealm[plugin>com.googlecode.flyway:flyway-maven-plugin:1.7, parent: sun.misc.Launcher$AppClassLoader@11799e7]
[DEBUG] Configuring mojo 'com.googlecode.flyway:flyway-maven-plugin:1.7:init' with include-project-dependencies configurator -->
[DEBUG]   (f) driver = org.hsqldb.jdbcDriver
[DEBUG]   (f) initialDescription = Base Migration
[DEBUG]   (f) initialVersion = 1
[DEBUG]   (f) schemas = PUBLIC
[DEBUG]   (f) settings = org.apache.maven.execution.SettingsAdapter@1aa246e
[DEBUG]   (f) url = jdbc:hsqldb:hsql://localhost:9001/testdb
[DEBUG]   (f) user = SA
[DEBUG] -- end configuration --
[DEBUG] Database: HSQL Database Engine
[INFO] Hsql does not support locking. No concurrent migration supported.
[DEBUG] Schema: PUBLIC
[INFO] Creating Metadata table: schema_version (Schema: PUBLIC)
[DEBUG] Found statement at line 17: CREATE TABLE PUBLIC.schema_version (
version VARCHAR(20) PRIMARY KEY,
description VARCHAR(100),
type VARCHAR(10) NOT NULL,
script VARCHAR(200) NOT NULL,
checksum INT,
installed_by VARCHAR(30) NOT NULL,
installed_on TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
execution_time INT,
state VARCHAR(15) NOT NULL,
current_version BIT NOT NULL,
CONSTRAINT PUBLIC.schema_version_script_unique UNIQUE (script)
);
[DEBUG] Found statement at line 30: CREATE INDEX    PUBLIC.schema_version_current_version_index ON PUBLIC.schema_version (current_version);
[DEBUG] Executing SQL: CREATE TABLE PUBLIC.schema_version (
version VARCHAR(20) PRIMARY KEY,
description VARCHAR(100),
type VARCHAR(10) NOT NULL,
script VARCHAR(200) NOT NULL,
checksum INT,
installed_by VARCHAR(30) NOT NULL,
installed_on TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
execution_time INT,
state VARCHAR(15) NOT NULL,
current_version BIT NOT NULL,
CONSTRAINT PUBLIC.schema_version_script_unique UNIQUE (script)
)
[DEBUG] Executing SQL: CREATE INDEX PUBLIC.schema_version_current_version_index ON PUBLIC.schema_version (current_version)
[DEBUG] Metadata table created: schema_version (Schema: PUBLIC)

私は何か間違ったことをしていますか?誰かが私にヒントを与えてくれるなら、私が間違っていることを教えてくれるとうれしいです。

Maven テスト プロジェクト全体は [github] (https://github.com/skosmalla/flyway-maven-test) にあります。

よろしくお願いします、

サンドラ

4

1 に答える 1

2

flyway:initは、本番スキーマ(ABCやXYZなど)に既存のテーブルがあり、Flywayを使用してDBのライフサイクルを管理する場合に役立ちます。

V0_9__Prod.sqlローカルで実行するなど、本番スキーマの構造をSQLスクリプトにダンプできます。このようにして、開発DBをPRODの現在の構造に合わせることができます。機能を追加すると、のような追加の移行を追加できますV1__Base_Migration.sql

ただし、PRODにデプロイする場合は、再度実行する必要はありませんV0_9__Prod.sql。これを回避するには、0.9でPRODスキーマをflyway:initします。

移行を実行すると、スキップV0_9__Prod.sqlして直接に移動しV1__Base_Migration.sqlます。

この状況が当てはまらない場合は、flyway:migrateを実行するだけです。最初にflyway:initは必要ありません。

于 2012-08-03T15:31:35.160 に答える