webentwicklung-frage-antwort-db.com.de

Kann ich die Eigenschaftendatei in maven pom.xml für die Flyway-Konfiguration verwenden

<plugin>
    <groupId>com.googlecode.flyway</groupId>
    <artifactId>flyway-maven-plugin</artifactId>
    <version>1.7</version>
    <configuration>
        <driver>com.mysql.jdbc.Driver</driver>
        <url>jdbc:mysql://127.0.0.1:3306/db_abc</url>
        <user>db_user</user>
        <sqlMigrationPrefix>V</sqlMigrationPrefix>
    </configuration>
</plugin>

Ich möchte hier nicht Treiber, URL und Benutzer erwähnen. Ich habe bereits einen abc.property auf src/main/resources. Wie kann diese Datei hier verwendet werden?

22
Garry

Schauen Sie sich die properties-maven-plugin an. Sie können Eigenschaften aus einer Datei lesen, um sie dann in Ihrem Pom zu verwenden.

Fügen Sie die folgende Plugin-Definition hinzu:

  <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>src/main/resources/abc.properties</file>
          </files>
        </configuration>
      </execution>
    </executions>
  </plugin>

Wenn abc.properties enthält:

jdbc.driver = com.mysql.jdbc.Driver
jdbc.url = jdbc:mysql://127.0.0.1:3306/db_ab
jdbc.user = db_user

Sie können die Eigenschaften dann wie folgt verwenden:

<!-- language: xml -->

<driver>${jdbc.driver}</driver>
<url>${jdbc.url}</url>
<user>${jdbc.user}</user>

in Version 3.0 müssen Sie configFile wie folgt verwenden: 

<configFile>src/main/resources/db/config/flyway.properties</configFile>
4
abk

Meiner Meinung nach besteht der beste und flexibelste Ansatz darin,

a) Profile verwenden und filtern - Alle Konfigurationseigenschaften für ein bestimmtes Profil (Entwicklung, Test usw.) beibehalten, z. in development.properties:

jdbc.url=jdbc:mysql://127.0.0.1:3306/testdb?useSSL=false
jdbc.user=testuser
jdbc.password=testpass
jdbc.driver=com.mysql.jdbc.Driver

Definieren Sie dann in Ihrer POM-Datei (möglicherweise im Root-Pom) ein Profil, z. B .:

...
<profiles>
    <profile>
        <id>development</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <build>
            <filters>
                <filter>../filters/development.properties</filter>
            </filters>
        </build>
        ...

hier sehen Sie, dass das development - Profil standardmäßig aktiviert ist. Wenn Sie ein anderes Profil verwenden möchten, setzen Sie es mit

-p [profile-id]


b) flyway.properties mit gefilterten Werten setzen - Ihre flyway.properties sollten sich z. In src/main/resources und die Werte sollten aus den in der Profileigenschaftendatei definierten Parametern verwendet werden:

flyway.driver = ${jdbc.driver}
flyway.url = ${jdbc.url}
flyway.user = ${jdbc.user}
flyway.password = ${jdbc.password}

c) reference flyway.properties aus build-Verzeichnis - benutze die einfache Plugin-Konfiguration (ich mag Clean Poms):

...
    <build>
        <resources>
            <!-- This way we instruct maven to inject values from filters into the resources -->
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <groupId>org.flywaydb</groupId>
                <artifactId>flyway-maven-plugin</artifactId>
                <configuration>
                    <configFile>${project.build.directory}/classes/flyway.properties</configFile>
                    <locations>
                        <location>classpath:migration/mysql</location>
                    </locations>
                </configuration>
            </plugin>
        </plugins>
    </build>
    ...

Vergessen Sie nicht, die Filterung in Ressourcen zu aktivieren, wie hier in vielen Beispielen gezeigt. Meine flyway-maven-plugin-Version ist 3.2.1 und wird in pluginManagement in Parent Pom verwaltet. Daher ist die Version hier nicht sichtbar. Ich verwende auch explizite SQL-Skripts mit der Standortkonfiguration.

4
user2310395

Es gibt verschiedene Möglichkeiten, damit umzugehen. Ein Ansatz ist, es umgekehrt zu machen.

Das bedeutet, dass die zu verwendenden Eigenschaften als Eigenschaften innerhalb von pom.xml gespeichert werden und dass die Datei abc.properties nur Platzhalter enthält, die beim Erstellen ausgefüllt werden.

Ich werde Ihnen zeigen, wie es konfiguriert werden kann.

So sieht der pom.xml aus:

<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>com.stackoverflow</groupId>
    <artifactId>Q12619446</artifactId>
    <version>1.0-SNAPSHOT</version>

    <name>${project.artifactId}-${project.version}</name>

    <properties>
        <jdbc.driver>com.mysql.jdbc.Driver</jdbc.driver>
        <jdbc.url>jdbc:mysql://127.0.0.1:3306/db_abc</jdbc.url>
        <jdbc.user>db_user</jdbc.user>
    </properties>

    <build>
        <plugins>
            <plugin>
                <groupId>com.googlecode.flyway</groupId>
                <artifactId>flyway-maven-plugin</artifactId>
                <version>1.7</version>
                <configuration>
                    <driver>${jdbc.driver}</driver>
                    <url>${jdbc.url}</url>
                    <user>${jdbc.user}</user>
                </configuration>
            </plugin>
        </plugins>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>
</project>

Und dies wird dein src/main/resources/abc.properties sein (benutze die Schlüsselnamen deiner Wahl):

jdbcDriver = ${jdbc.driver}
jdbcUrl = ${jdbc.url}
jdbcUser = ${jdbc.user}

Nach dem Build sieht der target/classes/abc.properties folgendermaßen aus:

jdbcDriver = com.mysql.jdbc.Driver
jdbcUrl = jdbc:mysql://127.0.0.1:3306/db_abc
jdbcUser = db_user

Wie bereits erwähnt, ist dies nur eine von mehreren Möglichkeiten, dies zu tun. Es könnte nicht genau Ihren Bedürfnissen entsprechen, aber es könnte.

2
maba

Garry,

es gibt eine weitere Möglichkeit, Datenbankverbindungsparameter nicht in Ihrer Pom-Datei zu speichern. Insbesondere kann man sie zur Datei settings.xml im .m2-Unterordner des Benutzerordners [1] hinzufügen. Der Vorteil ist, dass die db-Paraneter nicht im Projektordner gespeichert sind und nicht an das Repository übertragen werden, sodass jeder Entwickler seine eigenen Einstellungen verwenden kann.

Das Beispiel für die Einstellungsdatei könnte wie das folgende Beispiel aussehen.

<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.Apache.org/SETTINGS/1.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">
  <profiles>
    <profile>
      <id>fw</id>
      <properties>
        <flyway.url>jdbc:Oracle:thin:@//localhost:1521/xe</flyway.url>
        <flyway.user>Your login</flyway.user>
        <flyway.password>Your password</flyway.password>
      </properties>
    </profile>
  </profiles>
  <activeProfiles>
    <activeProfile>fw</activeProfile>
  </activeProfiles>
</settings>

Danach können Sie Ihre Pom-Datei entsprechend dem folgenden Snippet ändern.

<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.Apache.org/POM/4.0.0 http://maven.Apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.Apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <modelVersion>4.0.0</modelVersion>
    ...
    <dependencies>
        ...
    </dependencies>

    <profiles>
        <profile>
            <id>fw</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.flywaydb</groupId>
                        <artifactId>flyway-maven-plugin</artifactId>
                        <version>3.2.1</version>
                        <configuration>
                            <url>${flyway.url}</url>
                            <user>${flyway.user}</user>
                            <password>${flyway.password}</password>
                        </configuration>
                        <dependencies>
                            <dependency>
                                <groupId>com.Oracle</groupId>
                                <artifactId>ojdbc7</artifactId>
                                <version>12.1.0.1.0</version>
                            </dependency>
                        </dependencies>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>
</project>

Im obigen Beispiel wird der Treiber von Oracle verwendet, Sie können ihn jedoch durch den erforderlichen ersetzen.

Um die aktuellen Einstellungen zu drucken, führen Sie Folgendes aus.

mvn help:effective-settings
1
javaeeeee

In Version 3.x haben Sie die Option configFile

By default- flyway.properties in the same directory as the project POM.

Sie können eine externe Eigenschaftendatei im Konfigurationsabschnitt von pom hinzufügen oder übergeben, wenn Sie das Maven-Zielbeispiel - Befehlszeile ausführen.

mvn <goal> -Dflyway.configFile=myConfig.properties 

Pom-Datei-

<plugin>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-maven-plugin</artifactId>
<version>3.2.1</version>
<configuration>
    <driver/>
    <url/>
    <user/>
    <password/>
    <baselineVersion>1.0</baselineVersion>
    <baselineDescription>Base Migration</baselineDescription>
    <skip>false</skip>
    <configFile>myConfig.properties</configFile>
    </configuration>
</plugin>
0