Запуск команд пролетного пути из командной строки с использованием свойств загрузки Spring для maven - PullRequest
3 голосов
/ 09 июля 2020

У меня есть проект весенней загрузки с использованием maven, который я включил в flyway:

pom. xml:

    <dependency>
        <groupId>org.flywaydb</groupId>
        <artifactId>flyway-core</artifactId>
        <version>6.5.0</version>
    </dependency>

и application.properties:

#LOCAL
spring.datasource.url=jdbc:postgresql://localhost:5432/theDatabase
spring.datasource.username=theRightUser
spring.datasource.password=theRightPassword

, и оно работает должным образом, когда я запускаю приложение.

Однако я пытаюсь запустить mvn flyway:clean из командной строки, и оно, похоже, неправильно распознает конфигурацию:

[ERROR] Failed to execute goal org.flywaydb:flyway-maven-plugin:6.4.4:clean (default-cli) on project my-service: org.flywaydb.core.api.FlywayException: Unable to connect to the database. Configure the url, user and password! -> [Help 1]

Я попытался добавить свойства spring.flyway (user / pass / url) в файл application.properties, но это дало мне ту же ошибку. Что мне нужно сделать, чтобы перелетный путь мог читать из application.properies, как это происходит при нормальной работе приложения?

РЕДАКТИРОВАТЬ: Я добился небольшого прогресса: я смог сослаться на свой application.properties как файл конфигурации пролетного пути, добавив его в pom. xml:

        <plugin>
            <groupId>org.flywaydb</groupId>
            <artifactId>flyway-maven-plugin</artifactId>
            <version>6.5.0</version>
            <configuration>
                <configFiles>${project.basedir}/src/main/resources/application.properties</configFiles>
            </configuration>
        </plugin>

Итак, теперь в этом файле , У меня есть flyway.url, flyway.user и flyway.password. Это позволяет мне запускать цели пролетного пути из командной строки, но это не совсем то решение, которое мне нужно. Я собираюсь использовать этот плагин, чтобы попытаться прочитать свойства в файле pom. xml, а затем использовать эти значения в области flyway-maven-plugin s <configuration>.

        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>properties-maven-plugin</artifactId>
            <version>1.0.0</version>
            <executions>
                <execution>
                    <phase>initialize</phase>
                    <goals>
                        <goal>read-project-properties</goal>
                    </goals>
                    <configuration>
                        <files>
                            <file>${project.basedir}/src/main/resources/application.properties</file>
                        </files>
                    </configuration>
                </execution>
            </executions>
        </plugin>

, что будет позвольте мне сделать это:

        <plugin>
            <groupId>org.flywaydb</groupId>
            <artifactId>flyway-maven-plugin</artifactId>
            <version>6.5.0</version>
            <configuration>
                <url>${spring.datasource.url}</url>
                <user>${spring.datasource.username}</user>
                <password>${spring.datasource.password}</password>
            </configuration>
        </plugin>

1 Ответ

1 голос
/ 09 июля 2020

Когда вы запускаете flyway как цель maven, он не будет брать свойства из application.properties, вместо этого он будет использовать configuration, предоставленный flyway-maven-plugin, вы можете настроить flyway-maven-plugin следующим образом способ -

Добавьте следующий плагин в pom.xml -

<plugin>
    <groupId>org.flywaydb</groupId>
    <artifactId>flyway-maven-plugin</artifactId>
    <version>6.5.0</version>
</plugin>

Затем мы настроим flyway-maven-plugin, плагин Flyway Maven можно настроить множеством следующих способов ( наиболее удобно),

Раздел конфигурации плагина

Самый простой способ - просто использовать раздел конфигурации плагина в вашем pom. xml:

<plugin>
    <groupId>org.flywaydb</groupId>
    <artifactId>flyway-maven-plugin</artifactId>
    <version>6.5.0</version>
    <configuration>
        <driver>org.hsqldb.jdbcDriver</driver>
        <url>jdbc:hsqldb:file:${project.build.directory}/db/flyway_sample;shutdown=true</url>
        <user>SA</user>
        <password>mySecretPwd</password>
        <connectRetries>10</connectRetries>
        <initSql>SET ROLE 'myuser'</initSql>
        <schemas>
            <schema>schema1</schema>
            <schema>schema2</schema>
            <schema>schema3</schema>
        </schemas>
        <callbacks>
            <callback>com.mycompany.project.CustomCallback</callback>
            <callback>com.mycompany.project.AnotherCallback</callback>
        </callbacks>
        <skipDefaultCallbacks>false</skipDefaultCallbacks>
        <cleanDisabled>false</cleanDisabled>
        <skip>false</skip>
        <configFiles>
            <configFile>myConfig.conf</configFile>
            <configFile>other.conf</configFile>
        </configFiles>
        <workingDirectory>/my/working/dir</workingDirectory>
    </configuration>
</plugin>

Свойства Maven

Чтобы упростить работу с профилями Maven и логически группировать конфигурацию, плагин Flyway Maven также поддерживает свойства Maven, обновите раздел свойств в pom.xml следующим образом:

<project>
    ...
    <properties>
        <!-- Properties are prefixed with flyway. -->
        <flyway.user>myUser</flyway.user>
        <flyway.password>mySecretPwd</flyway.password>

        <!-- List are defined as comma-separated values -->
        <flyway.schemas>schema1,schema2,schema3</flyway.schemas>

        <!-- Individual placeholders are prefixed by flyway.placeholders. -->
        <flyway.placeholders.keyABC>valueXYZ</flyway.placeholders.keyABC>
        <flyway.placeholders.otherplaceholder>value123</flyway.placeholders.otherplaceholder>
    </properties>
    ...
</project>

Внешний файл конфигурации

Другой способ - создать отдельный файл .properties, имя файла конфигурации по умолчанию - flyway.properties a и он должен находиться в том же каталоге, что и файл pom. xml. Кодировка указывается flyway.encoding (по умолчанию UTF-8):

flyway.user=databaseUser
flyway.password=databasePassword
flyway.schemas=schemaName
...

Если вы используете любое другое имя (например, customConfig.properties) в качестве файла конфигурации, то его следует указать явно при вызове команда Maven:

$ mvn <goals> -Dflyway.configFile=customConfig.properties

После настройки flyway-maven-plugin с желаемой конфигурацией мы сможем выполнять цели maven пролетного пути из командной строки.

Вы можете продолжить чтение здесь .

Надеюсь, это поможет!

...