flyway: init не находит исходный sql-скрипт

Провожу несколько экспериментов с плагином flyway-maven-plugin. У меня нет пустой базы данных, поэтому мне нужен начальный сценарий ddl. Я следую инструкциям в вики-сайте flyway:

Я поместил сценарий sql с именем V1__Base_Migration.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>

Когда я вызываю mvn install flyway:init в cmd и наблюдаю за запуском в базе данных, я могу найти таблицу версий flyway, но не таблицу, ddl которой находится в sql-скрипте.

Когда я просматриваю журнал отладки 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)

С наилучшими пожеланиями,

Сандра


person Sandra Parsick    schedule 03.08.2012    source источник


Ответы (1)


flyway: init полезен, когда у вас есть существующие таблицы в производственной схеме (скажем, ABC и XYZ), и вы решили начать использовать Flyway для управления жизненным циклом своей БД.

Вы можете выгрузить структуру производственной схемы в sql-скрипте, скажем V0_9__Prod.sql для локального выполнения. Таким образом вы можете согласовать свою базу данных разработчика с текущей структурой из PROD. По мере добавления функций вы можете добавлять дополнительные миграции, например V1__Base_Migration.sql.

Однако при развертывании в PROD вы не хотите, чтобы V0_9__Prod.sql снова запускался. Чтобы избежать этого, вы можете flyway: инициализировать схему PROD с помощью 0.9.

Когда он выполнит миграцию, он пропустит V0_9__Prod.sql и сразу перейдет к V1__Base_Migration.sql.

Если эта ситуация к вам не относится, вы можете просто запустить flyway: migrate. Перелетный путь не нужен: сначала инициализация.

person Axel Fontaine    schedule 03.08.2012
comment
Если я правильно понимаю, цель maven flyway:init означает подготовку базы данных для использования пролетного пути, а не инициализацию самой базы данных. Таким образом, дамп sql системы prod имеет функциональность документации. - person Sandra Parsick; 03.08.2012
comment
Нет, дамп sql из prod предназначен для применения в dev, чтобы убедиться, что все БД находятся на одной странице. Flyway: init предназначен для prod, чтобы убедиться, что дамп не запускается повторно после развертывания. - person Axel Fontaine; 03.08.2012
comment
Может быть, в вашем случае mvn install flyway: migrate может быть достаточно? - person Axel Fontaine; 03.08.2012
comment
Да ты прав. mvn install flyway:migrate было достаточно. Большое спасибо за вашу помощь. - person Sandra Parsick; 04.08.2012