Specifying flywayUrl via a system property in SBT

Using Flyway with sbt , how can flywayUrl specified through system properties ( -D ) instead of build.sbt ?

I want to start the migration through the command line, specifying all the parameters (driver, URL, user, password) without defining them in build.sbt .

The plugin documentation page seems to indicate that this should be possible:

Redefinition order

System Properties> Plugin Configuration

I tried to run it as follows:

 sbt -Dflyway.url=jdbc:h2:file:target/foobar -Dflyway.user=SA flywayMigrate 

But the flyway.url property seems to be ignored in favor of the flywayUrl property defined in build.sbt .

Review of the project with these files:

build.sbt

 libraryDependencies ++= Seq( "com.h2database" % "h2" % "1.3.174" ) seq(flywaySettings: _*) flywayUrl := "something that should be overriden" 

Project /plugins.sbt

 addSbtPlugin("com.googlecode.flyway" % "flyway-sbt" % "2.3") resolvers += "Flyway" at "http://flywaydb.org/repo" 

Src / home / resources / db / migration / V1__Create_person_table.sql

 create table PERSON ( ID int not null, NAME varchar(100) not null ); 

Running this command:

 $ sbt -Dflyway.url=jdbc:h2:file:target/foobar -Dflyway.user=SA flywayMigrate 

Produces this error:

 Loading /usr/share/sbt/bin/sbt-launch-lib.bash [info] Loading project definition from /home/fernando/work/scratch/flyway-sbt/foobar/project [info] Updating {file:/home/fernando/work/scratch/flyway-sbt/foobar/project/}foobar-build... [info] Resolving org.fusesource.jansi#jansi;1.4 ... [info] Done updating. [info] Set current project to foobar (in build file:/home/fernando/work/scratch/flyway-sbt/foobar/) [info] Updating {file:/home/fernando/work/scratch/flyway-sbt/foobar/}foobar... [info] Resolving org.fusesource.jansi#jansi;1.4 ... [info] Done updating. com.googlecode.flyway.core.api.FlywayException: Invalid JDBC URL (should start with jdbc:) : something that should be overriden at com.googlecode.flyway.core.util.jdbc.DriverDataSource.<init>(DriverDataSource.java:82) at com.googlecode.flyway.sbt.FlywayPlugin$FlywayOps$.configure$extension1(FlywayPlugin.scala:214) at com.googlecode.flyway.sbt.FlywayPlugin$FlywayOps$.configure$extension0(FlywayPlugin.scala:207) at com.googlecode.flyway.sbt.FlywayPlugin$Flyway$.apply(FlywayPlugin.scala:193) at com.googlecode.flyway.sbt.FlywayPlugin$$anonfun$flywaySettings$26$$anonfun$apply$1.apply$mcI$sp(FlywayPlugin.scala:145) at com.googlecode.flyway.sbt.FlywayPlugin$$anonfun$flywaySettings$26$$anonfun$apply$1.apply(FlywayPlugin.scala:145) at com.googlecode.flyway.sbt.FlywayPlugin$$anonfun$flywaySettings$26$$anonfun$apply$1.apply(FlywayPlugin.scala:145) at com.googlecode.flyway.sbt.FlywayPlugin$.withContextClassLoader(FlywayPlugin.scala:184) at com.googlecode.flyway.sbt.FlywayPlugin$.com$googlecode$flyway$sbt$FlywayPlugin$$withPrepared(FlywayPlugin.scala:167) at com.googlecode.flyway.sbt.FlywayPlugin$$anonfun$flywaySettings$26.apply(FlywayPlugin.scala:145) at com.googlecode.flyway.sbt.FlywayPlugin$$anonfun$flywaySettings$26.apply(FlywayPlugin.scala:145) at scala.Function3$$anonfun$tupled$1.apply(Function3.scala:35) at scala.Function3$$anonfun$tupled$1.apply(Function3.scala:34) at scala.Function1$$anonfun$compose$1.apply(Function1.scala:47) at sbt.$tilde$greater$$anonfun$$u2219$1.apply(TypeFunctions.scala:42) at sbt.std.Transform$$anon$4.work(System.scala:64) at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:237) at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:237) at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:18) at sbt.Execute.work(Execute.scala:244) at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:237) at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:237) at sbt.ConcurrentRestrictions$$anon$4$$anonfun$1.apply(ConcurrentRestrictions.scala:160) at sbt.CompletionService$$anon$2.call(CompletionService.scala:30) at java.util.concurrent.FutureTask.run(FutureTask.java:262) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) at java.util.concurrent.FutureTask.run(FutureTask.java:262) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:744) [error] (*:flywayMigrate) com.googlecode.flyway.core.api.FlywayException: Invalid JDBC URL (should start with jdbc:) : something that should be overriden [error] Total time: 0 s, completed Feb 7, 2014 3:32:39 PM 
+1
scala database-migration sbt flyway
source share
1 answer

The following is the definition of flywayUrl :

 val flywayUrl = settingKey[String]("The jdbc url to use to connect to the database.") 

It seems I can’t find how a setting can be set through a system property. The plugin does not seem to support it.

With this in mind, you should find the following build.sbt solution and be able to set its value through the corresponding system property:

 flywayUrl := System.getProperty("flyway.url", "[default]") 

When sbt is running without flyway.url :

 $ sbt 'show flywayUrl' [info] Loading global plugins from /Users/jacek/.sbt/0.13/plugins [info] Set current project to flyway (in build file:/Users/jacek/sandbox/so/flyway/) [info] [default] 

And when it is installed on the command line:

 $ sbt -Dflyway.url=command-line 'show flywayUrl' [info] Loading global plugins from /Users/jacek/.sbt/0.13/plugins [info] Set current project to flyway (in build file:/Users/jacek/sandbox/so/flyway/) [info] command-line 

You may also find another question. Setting a parameter value on the command line if the default value specified in the assembly? , not used.

+2
source share

All Articles