2012-09-27 13 views
17
<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 el controlador, la URL y el usuario aquí. Ya tengo un abc.property en src/main/resources. ¿Cómo puede usar ese archivo aquí?¿Puedo utilizar el archivo de propiedad en maven pom.xml para la configuración de la ruta de vuelo

Respuesta

30

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

Agregue la siguiente Defintion 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 

continuación, puede utilizar las propiedades como sigue:

<!-- language: xml --> 

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

Muchas gracias, funciona como el encanto .. – Garry

+5

Para referencia futura, esto funciona muy bien, pero necesita invocar mvn inicializar explícitamente antes de llamar al complemento flay, p. 'mvn initialize flyway: migrate' –

1

Hay varias maneras de tratar con este. Un enfoque es hacerlo al revés.

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

Le mostraré cómo se puede configurar.

Esto es lo que el pom.xml se verá así:

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

Y esta será su src/main/resources/abc.properties (utilizar los nombres clave de su elección):

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

Después de la construcción del target/classes/abc.properties se verá como este:

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

Como se indicó, esto es solo uno de varias maneras de hacerlo. Puede que no satisfaga sus necesidades exactas, pero podría serlo.

+2

gracias por la respuesta rápida Pero el problema principal es que no quiero declarar propiedades en POM.XML. – Garry

3

en la versión 3.0 hay que usar archivoConfig como:

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

En la versión 3.x ... tiene configFile as - –

0

En la versión 3.x usted tiene la opción de archivoConfig

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

Puede añadir archivo de propiedades externa en la sección de configuración del pom o CAN se pasan cuando se ejecuta meta experto ejemplo- comando de línea

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

Pom Archivo-

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

Garry,

no es una forma más de no colocar los parámetros de conexión de base de datos a su pom-archivo. En particular, uno puede agregarlos al archivo settings.xml en la subcarpeta .m2 de la carpeta del usuario [1].El beneficio es que los parámetros de 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 siguiente ejemplo.

<?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 pom-file de acuerdo con el siguiente fragmento.

<?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 por el requerido.

Para imprimir la configuración actual, realice lo siguiente.

mvn help:effective-settings 
3

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

a) perfiles de uso y filtrado - Mantener todas las propiedades de configuración de perfil específico (desarrollo, prueba, etc.) , p.ej 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 

A continuación, en el archivo de POM (POM posiblemente en la raíz) definir un perfil, por ejemplo:

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

aquí se puede ver que el desarrollo perfil se activa por defecto . Si desea utilizar otro perfil configurarlo con

-p [profile-id] 


b) flyway.properties conjunto con los valores filtrados - sus flyway.properties deben sentarse, por ejemplo, en src/main/recursos y los valores deben usarse a partir de los parámetros definidos en las propiedades del perfil del archivo:

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

c) flyway.properties de referencia de directorio de construcción - utilizar la configuración simple plugin (me gusta mucho limpia 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> 
    ... 

No olvide habilitar el filtrado en recursos como se muestra en muchos ejemplos aquí. Mi versión flyway-maven-plugin es 3.2.1 y se administra en pluginManagement en parent pom, por lo que la versión no está visible aquí. También utilizo scripts sql explícitos con configuración de ubicaciones.

+0

Si en configFile, especifico la ruta a src/main/resources/flyway.properties, no funciona incluso cuando compilo antes de migrar. ¿Algunas ideas? – rohanagarwal

+0

¿Qué sucede cuando intentas migrar? ¿Intentó con la opción -X en maven y qué dice? – user2310395

Cuestiones relacionadas