generate example create configurar change maven pom.xml flyway

example - maven settings.xml proxy



¿Puedo usar el archivo de propiedades en maven pom.xml para la configuración del corredor de vuelo? (6)

Echa un vistazo a las properties-maven-plugin . Le permite leer las propiedades de un archivo para luego usarlas en su pom.

Agregue la siguiente definición de plugin:

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

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

A continuación, puede utilizar las propiedades de la siguiente manera:

<!-- language: xml --> <driver>${jdbc.driver}</driver> <url>${jdbc.url}</url> <user>${jdbc.user}</user>

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

No quiero mencionar driver, url y usuario aquí. Ya tengo una abc.property en src/main/resources . ¿Cómo puedo usar ese archivo aquí?


En la versión 3.x tienes la opción configFile

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

Puede agregar un archivo de propiedades externo en la sección de configuración de pom o se puede pasar al ejecutar maven goal example- command line-

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

Archivo pom-

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


En mi opinión, el mejor y más flexible enfoque es:

a) utilice los perfiles y el filtrado : mantenga todas las propiedades de configuración para un perfil específico (desarrollo, prueba, etc.), por ejemplo, en 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

Luego, en su archivo pom (posiblemente en root pom) defina un perfil, por ejemplo:

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

Aquí puedes ver que el perfil de desarrollo está activado por defecto. Si quieres usar otro perfil configúralo con

-p [profile-id]


b) establezca flyway.properties con valores filtrados : su flyway.properties debe ubicarse, por ejemplo, en src / main / resources y los valores deben usarse desde los parámetros definidos en el archivo de propiedades del perfil:

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

c) haga referencia a flyway.properties desde el directorio de compilación : use la configuración simple del complemento (realmente me gustan los poms limpios):

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

No olvide habilitar el filtrado de recursos como se muestra en muchos ejemplos aquí. Mi versión de Flyway-Maven-Plugin es 3.2.1 y se administra en pluginManagement en el pom principal, por lo tanto, la versión no es visible aquí. También uso scripts sql explícitos con configuración de ubicaciones.


Garry

Hay una forma más de no colocar los parámetros de conexión de la base de datos en su archivo pom. En particular, uno puede agregarlos al archivo settings.xml en la subcarpeta .m2 de la carpeta del usuario [1] . El beneficio es que los paraneters db no viven en la carpeta del proyecto y no se transmiten al repositorio, por lo que cada desarrollador puede usar su propia configuración.

El ejemplo del archivo de configuración podría verse como el ejemplo a continuación.

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

Después de eso, puede modificar su archivo pom de acuerdo con el siguiente fragmento de código.

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

En el ejemplo anterior se usa el controlador de Oracle, pero puede reemplazarlo con el requerido.

Para imprimir la configuración actual ejecute lo siguiente.

mvn help:effective-settings


Hay varias maneras de lidiar con esto. Un enfoque es hacerlo al revés.

Eso significa que las propiedades a usar se guardan como propiedades dentro del pom.xml y que el archivo abc.properties solo tiene marcadores de posición que se completarán en el momento de la compilación.

Te mostraré cómo se puede configurar.

Así es como se verá el 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.</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>

Y este será su src/main/resources/abc.properties (use los nombres de clave que elija):

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

Después de la construcción, el target/classes/abc.properties se verá así:

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

Como se dijo, esta es solo una de las varias formas de hacerlo. Puede que no se ajuste a sus necesidades exactas pero podría.


en la versión 3.0 tienes que usar configFile como:

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