Как заполнители работают в Flyway? - PullRequest
10 голосов
/ 23 февраля 2012

Я оцениваю Flyway для использования в моем проекте. Наши текущие сценарии SQL содержат заполнители для таких вещей, как URL-адреса, которые будут иметь разные доменные имена в зависимости от среды (dev, qa, prod).

В частности, у нас могут быть операторы INSERT, такие как

INSERT INTO FEED VALUES ('app.${env.token}.company.org/feed1', 'My Feed');

$ {env.token} необходимо заменить на 'dev', 'qa' или 'prod'.

У нас есть около 50 различных свойств, которые потенциально могут нуждаться в замене в сценариях SQL. Все свойства находятся в одном или двух файлах свойств.

Есть ли способ запустить задачу миграции Flyway Ant, чтобы она извлекала токены и значения замены из файла свойств? Что-то похожее на задачу фильтра Ant?

Ответы [ 4 ]

11 голосов
/ 24 февраля 2012

В настоящее время при предоставлении заполнителей в качестве свойств к имени свойства должен быть добавлен префикс flyway.placeholder.

Например, заполнитель $ {env.token} можно указать непосредственно как это свойство Ant: flyway.placeholder.env.token

В настоящее время не поддерживается передача файла свойств напрямую, без использования префиксов для имен свойств. Не стесняйтесь поднимать проблему в Issue Tracker . : -)

7 голосов
/ 03 марта 2017

Если бы токен был subdomain:

INSERT INTO FEED VALUES ('app.${subdomain}.company.org/feed1', 'My Feed');

Значения в flyway.conf:

flyway.url=jdbc:mydb://db
flyway.user=root
flyway.schemas=schema1
flyway.placeholders.subdomain=example

Или командная строка:

flyway -url=jdbc:mydb://db -user=root -schemas=schema1 -placeholders.subdomain=example migrate

Будетзапустите скрипт как:

INSERT INTO FEED VALUES ('app.example.company.org/feed1', 'My Feed');
0 голосов
/ 03 июня 2019

Исходя из моего опыта, гораздо проще использовать переменные окружения вместо CLI или файла конфигурации (особенно при использовании docker и k8s).

Вы можете использовать переменные окружения в следующем формате -

export FLYWAY_PLACEHOLDERS_USER=${USER}

Затем в своем выражении sql используйте эту переменную следующим образом -

INSERT INTO tmptable (user)
VALUES ('${user}')

Подробнее о средепеременные здесь

0 голосов
/ 06 мая 2019

Maven версия:

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
        <plugin>
            <groupId>org.flywaydb</groupId>
            <artifactId>flyway-maven-plugin</artifactId>
            <configuration>
                <url>jdbc:mysql://localhost/cloud</url>
                <user>root</user>
                <password>root</password>
                <placeholderReplacement>false</placeholderReplacement>
            </configuration>
            <dependencies>
                <dependency>
                    <groupId>mysql</groupId>
                    <artifactId>mysql-connector-java</artifactId>
                    <version>${mysql.version}</version>
                    <scope>runtime</scope>
                </dependency>
            </dependencies>
        </plugin>
    </plugins>
</build>
...