web-dev-qa-db-fra.com

Puis-je utiliser le fichier de propriétés dans maven pom.xml pour la configuration des voies de migration

<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>

Je ne veux pas mentionner le pilote, l'URL et l'utilisateur ici. J'ai déjà un abc.property sur src/main/resources. Comment utiliser ce fichier ici?

22
Garry

Regardez le properties-maven-plugin . Il vous permet de lire les propriétés d'un fichier pour les utiliser ensuite dans votre pom.

Ajoutez la définition de plugin suivante:

  <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>

Si abc.properties contient:

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

Vous pouvez ensuite utiliser les propriétés comme suit:

<!-- language: xml -->

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

dans la version 3.0, vous devez utiliser configFile comme: 

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

À mon avis, la meilleure approche et la plus souple consiste à:

a) utiliser des profils et filtrer - conserver toutes les propriétés de configuration pour un profil spécifique (développement, test, etc.), par ex. dans 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

Ensuite, dans votre fichier pom (éventuellement dans root pom), définissez un profil, par exemple:

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

vous pouvez voir ici que le profil development est activé par défaut. Si vous souhaitez utiliser un autre profil, définissez-le avec

-p [profile-id]


b) définissez flyway.properties avec les valeurs filtrées - votre flyway.properties devrait être assis, par exemple. dans src/main/resources et les valeurs doivent être utilisées à partir des paramètres définis dans le fichier de propriétés du profil:

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

c) référence flyway.properties depuis le répertoire de construction - utilise une configuration de plugin simple (j'aime beaucoup les poms propres):

...
    <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>
    ...

N'oubliez pas d'activer le filtrage des ressources, comme indiqué dans de nombreux exemples ici. La version de mon flyway-maven-plugin est 3.2.1 et elle est gérée dans pluginManagement dans le pom parent. Par conséquent, la version n’est pas visible ici. J'utilise également des scripts SQL explicites avec la configuration des emplacements.

4
user2310395

Il y a plusieurs façons de gérer cela. Une approche consiste à faire l'inverse.

Cela signifie que les propriétés à utiliser sont enregistrées en tant que propriétés dans le pom.xml et que le fichier abc.properties contient uniquement des espaces réservés qui seront renseignés au moment de la construction.

Je vais vous montrer comment il peut être configuré.

Voici à quoi ressemblera le pom.xml:

<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>

Et ce sera votre src/main/resources/abc.properties (utilisez les noms de clé de votre choix):

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

Après la construction, le target/classes/abc.properties ressemblera à ceci:

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

Comme indiqué, ceci n’est que une de plusieurs façons de le faire. Cela pourrait ne pas convenir à vos besoins, mais ce pourrait être le cas.

1
maba

Garry,

il existe un autre moyen de ne pas placer les paramètres de connexion à la base de données dans votre fichier pom. En particulier, on peut les ajouter au fichier settings.xml dans le sous-dossier .m2 du dossier de l'utilisateur [1] . L'avantage est que les paramètres de base de données ne résident pas dans le dossier du projet et ne sont pas transmis au référentiel. Chaque développeur peut donc utiliser ses propres paramètres.

L'exemple du fichier de paramètres pourrait ressembler à l'exemple ci-dessous.

<?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>

Après cela, vous pouvez modifier votre fichier pom en fonction de l'extrait de code suivant.

<?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>

Dans l'exemple ci-dessus, le pilote Oracle est utilisé, mais vous pouvez le remplacer par celui requis.

Pour imprimer les paramètres actuels, procédez comme suit.

mvn help:effective-settings
1
javaeeeee

Dans la version 3.x vous avez l'option configFile

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

Vous pouvez ajouter un fichier de propriétés externe dans la section de configuration de pom ou le transmettre en exécutant maven goal example - Command line-

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

Pom file-

<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
Mr.Pramod Anarase