GithubHelp home page GithubHelp logo

flyway-play's Introduction

Database Migrations Made Easy.

Flyway

Evolve your database schema easily and reliably across all your instances.

Simple, focused and powerful.

Works on

Windows, macOS, Linux, Docker and Java

Supported build tools

Maven and Gradle

Supported databases

Aurora MySQL, Aurora PostgreSQL, Azure Synapse, Clickhouse, CockroachDB, Databricks, DB2, Derby, Firebird, Google BigQuery, Google Cloud Spanner, H2, HSQLDB, Informix, MariaDB, MongoDB, MySQL, Oracle, Percona XtraDB Cluster, PostgreSQL, Redshift, SAP HANA (Including SAP HANA Cloud), SingleStoreDB, Snowflake, SQLite, SQL Server, Sybase ASE, TiDB, TimescaleDB, YugabyteDB

Third party plugins

SBT, Ant, Spring Boot, Grails, Play!, DropWizard, Grunt, Griffon, Ninja, ...

Documentation

You can find our getting started guides here. Our reference documentation can be found here.

About

Flyway is brought to you by Redgate with the help of many contributors.

See our post Flyway V10 has landed for our current major changes and improvements for the community

How to contribute

Please visit our contribution page to find out how you can contribute in various ways to the project.

License

Copyright © Red Gate Software Ltd 2010-2024

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Trademark

Flyway is a registered trademark of Boxfuse GmbH, owned by Red Gate Software Ltd.

flyway-play's People

Contributors

aziegler avatar baztoune avatar bitespresso avatar dependabot[bot] avatar dziman avatar etspaceman avatar gakuzzzz avatar gomes-rocket avatar jopecko avatar k4200 avatar kenichiro22 avatar markterm avatar mikielagutu avatar mipe avatar muuki88 avatar nafg avatar nlochschmidt avatar readmecritic avatar scala-steward avatar scubacabra avatar slivkamiro avatar sullis avatar tilmanginzel avatar tkawachi avatar tototoshi avatar xuwei-k avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

flyway-play's Issues

Flyway 5.2.x (broken)

I hit the following issues:

  1. Runtime error due to org.flywaydb.core.internal.util.jdbc.DriverDataSource being renamed to org.flywaydb.core.internal.jdbc.DriverDataSource ("util" removed from FQN)
  2. Runtime warning that using the Flyway constructor and mutators is deprecated; instead use the Flyway.configure fluent builder.

Play 2.4 RC3 testing fails due to Wrong user name or password

Hello, currently I try flyway-play with Play 2.4 RC3.
However I have a test suite that has a FakeApplication with the following code:

new WithApplication(application)

Whereas application is as following:

  def stubApplication = new GuiceApplicationBuilder()
    .in(Mode.Test)
    .configure(Map("play.evolutions.autoApply" -> "true"))
    .configure(inMemoryDatabase("default", Map("MODE" -> "PostgreSQL", "DB_CLOSE_DELAY" -> "-1")))

  def application = stubApplication
    .overrides(bind[TemplateRepository].toInstance(templateRepository))
    .overrides(bind[DocumentRepository].toInstance(documentRepository))
    .in(Mode.Test)
    .build()

However the test will fail hard with the following:

[error]   CAUSED BY org.flywaydb.core.api.FlywayException: Unable to obtain Jdbc connection from DataSource (jdbc:h2:mem:play-test--2066132676;MODE=PostgreSQL) for user 'null': Falscher Benutzer Name oder Passwort
[error] Wrong user name or password [28000-187]

I think flyway always wants to have a username and a password which doesnt apply to h2

Edit: It also seems that flyway ignores my username password settings inside the main play app.
I mean he ignore's db.default.username and db.default.password
I can work around it by adding the username and password to the database url, still dumb

More Information:
However I tested Specs2 and ScalaTests, both of them won't play nicely with the new behaviors.

Mostly I pass my def application to my tests either via WithApplication under Specs2 or with new App under ScalaTests while having a suite with MixedFixtures

Stacktrace:

schmitch@SHANGHAI:~/projects/envisia/loki-play$ sbt test
[info] Loading project definition from /Users/schmitch/projects/envisia/loki-play/project
[info] Set current project to loki-play (in build file:/Users/schmitch/projects/envisia/loki-play/)
[info] application - Creating Pool for datasource 'default'
[debug] application - Directory for migration files found. db/migration/default
[error] Uncaught exception when running envisia.loki.DocumentMockitoSpec: com.google.inject.CreationException: Unable to create injector, see the following errors:
[error] 
[error] 1) Error injecting constructor, org.flywaydb.core.api.FlywayException: Unable to obtain Jdbc connection from DataSource (jdbc:h2:mem:play-test-56005569;MODE=PostgreSQL;DB_CLOSE_DELAY=-1) for user 'null': Falscher Benutzer Name oder Passwort
[error] Wrong user name or password [28000-187]
[error]   at org.flywaydb.play.PlayInitializer.<init>(PlayInitializer.scala:31)
[error]   at org.flywaydb.play.PlayModule.bindings(PlayModule.scala:24):
[error] Binding(class org.flywaydb.play.PlayInitializer to self eagerly) (via modules: com.google.inject.util.Modules$OverrideModule -> play.api.inject.guice.GuiceableModuleConversions$$anon$1)
[error]   while locating org.flywaydb.play.PlayInitializer
[error] 
[error] 1 error
[info] application - Creating Pool for datasource 'default'
[debug] application - Directory for migration files found. db/migration/default
sbt.ForkMain$ForkError: Unable to create injector, see the following errors:

1) Error injecting constructor, org.flywaydb.core.api.FlywayException: Unable to obtain Jdbc connection from DataSource (jdbc:h2:mem:play-test-56005569;MODE=PostgreSQL;DB_CLOSE_DELAY=-1) for user 'null': Falscher Benutzer Name oder Passwort
Wrong user name or password [28000-187]
  at org.flywaydb.play.PlayInitializer.<init>(PlayInitializer.scala:31)
  at org.flywaydb.play.PlayModule.bindings(PlayModule.scala:24):
Binding(class org.flywaydb.play.PlayInitializer to self eagerly) (via modules: com.google.inject.util.Modules$OverrideModule -> play.api.inject.guice.GuiceableModuleConversions$$anon$1)
  while locating org.flywaydb.play.PlayInitializer

1 error
    at com.google.inject.internal.Errors.throwCreationExceptionIfErrorsExist(Errors.java:466)
    at com.google.inject.internal.InternalInjectorCreator.injectDynamically(InternalInjectorCreator.java:184)
    at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:110)
    at com.google.inject.Guice.createInjector(Guice.java:96)
    at com.google.inject.Guice.createInjector(Guice.java:73)
    at com.google.inject.Guice.createInjector(Guice.java:62)
    at play.api.inject.guice.GuiceBuilder.injector(GuiceInjectorBuilder.scala:126)
    at play.api.inject.guice.GuiceApplicationBuilder.build(GuiceApplicationBuilder.scala:93)
    at envisia.loki.DocumentMockitoSpec.application(DocumentMockitoSpec.scala:34)
    at envisia.loki.DocumentMockitoSpec$$anonfun$1$$anon$1.<init>(DocumentMockitoSpec.scala:41)
    at envisia.loki.DocumentMockitoSpec$$anonfun$1.apply$mcV$sp(DocumentMockitoSpec.scala:41)
    at org.scalatest.SuperEngine.registerNestedBranch(Engine.scala:613)
    at org.scalatest.fixture.WordSpecLike$class.org$scalatest$fixture$WordSpecLike$$registerBranch(WordSpecLike.scala:155)
    at org.scalatest.fixture.WordSpecLike$$anon$1.apply(WordSpecLike.scala:1011)
    at org.scalatest.words.ShouldVerb$StringShouldWrapperForVerb$class.should(ShouldVerb.scala:192)
    at org.scalatest.Matchers$StringShouldWrapper.should(Matchers.scala:6946)
    at envisia.loki.DocumentMockitoSpec.<init>(DocumentMockitoSpec.scala:40)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
    at java.lang.Class.newInstance(Class.java:442)
    at org.scalatest.tools.Framework$ScalaTestTask.execute(Framework.scala:641)
    at sbt.ForkMain$Run$2.call(ForkMain.java:294)
    at sbt.ForkMain$Run$2.call(ForkMain.java:284)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Caused by: sbt.ForkMain$ForkError: Unable to obtain Jdbc connection from DataSource (jdbc:h2:mem:play-test-56005569;MODE=PostgreSQL;DB_CLOSE_DELAY=-1) for user 'null': Falscher Benutzer Name oder Passwort
Wrong user name or password [28000-187]
    at org.flywaydb.core.internal.util.jdbc.DriverDataSource.getConnectionFromDriver(DriverDataSource.java:298)
    at org.flywaydb.core.internal.util.jdbc.DriverDataSource.getConnection(DriverDataSource.java:257)
    at org.flywaydb.core.internal.util.jdbc.JdbcUtils.openConnection(JdbcUtils.java:50)
    at org.flywaydb.core.Flyway.execute(Flyway.java:1287)
    at org.flywaydb.core.Flyway.migrate(Flyway.java:919)
    at org.flywaydb.play.PlayInitializer$$anonfun$org$flywaydb$play$PlayInitializer$$migrateAutomatically$1.apply(PlayInitializer.scala:125)
    at org.flywaydb.play.PlayInitializer$$anonfun$org$flywaydb$play$PlayInitializer$$migrateAutomatically$1.apply(PlayInitializer.scala:124)
    at scala.Option.foreach(Option.scala:257)
    at org.flywaydb.play.PlayInitializer.org$flywaydb$play$PlayInitializer$$migrateAutomatically(PlayInitializer.scala:124)
    at org.flywaydb.play.PlayInitializer$$anonfun$onStart$1.apply(PlayInitializer.scala:116)
    at org.flywaydb.play.PlayInitializer$$anonfun$onStart$1.apply(PlayInitializer.scala:114)
    at scala.collection.Iterator$class.foreach(Iterator.scala:750)
    at scala.collection.AbstractIterator.foreach(Iterator.scala:1202)
    at scala.collection.MapLike$DefaultKeySet.foreach(MapLike.scala:174)
    at org.flywaydb.play.PlayInitializer.onStart(PlayInitializer.scala:114)
    at org.flywaydb.play.PlayInitializer.<init>(PlayInitializer.scala:133)
    at org.flywaydb.play.PlayInitializer$$FastClassByGuice$$fd53e8fe.newInstance(<generated>)
    at com.google.inject.internal.cglib.reflect.$FastConstructor.newInstance(FastConstructor.java:40)
    at com.google.inject.internal.DefaultConstructionProxyFactory$1.newInstance(DefaultConstructionProxyFactory.java:61)
    at com.google.inject.internal.ConstructorInjector.provision(ConstructorInjector.java:105)
    at com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:85)
    at com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:267)
    at com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46)
    at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1103)
    at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
    at com.google.inject.internal.SingletonScope$1.get(SingletonScope.java:145)
    at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:41)
    at com.google.inject.internal.InternalInjectorCreator$1.call(InternalInjectorCreator.java:205)
    at com.google.inject.internal.InternalInjectorCreator$1.call(InternalInjectorCreator.java:199)
    at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1092)
    at com.google.inject.internal.InternalInjectorCreator.loadEagerSingletons(InternalInjectorCreator.java:199)
    at com.google.inject.internal.InternalInjectorCreator.injectDynamically(InternalInjectorCreator.java:180)
    at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:110)
    at com.google.inject.Guice.createInjector(Guice.java:96)
    at com.google.inject.Guice.createInjector(Guice.java:73)
    at com.google.inject.Guice.createInjector(Guice.java:62)
    at play.api.inject.guice.GuiceBuilder.injector(GuiceInjectorBuilder.scala:126)
    at play.api.inject.guice.GuiceApplicationBuilder.build(GuiceApplicationBuilder.scala:93)
    at envisia.loki.DocumentMockitoSpec.application(DocumentMockitoSpec.scala:34)
    at envisia.loki.DocumentMockitoSpec$$anonfun$1$$anon$1.<init>(DocumentMockitoSpec.scala:41)
    at envisia.loki.DocumentMockitoSpec$$anonfun$1.apply$mcV$sp(DocumentMockitoSpec.scala:41)
    at org.scalatest.SuperEngine.registerNestedBranch(Engine.scala:613)
    at org.scalatest.fixture.WordSpecLike$class.org$scalatest$fixture$WordSpecLike$$registerBranch(WordSpecLike.scala:155)
    at org.scalatest.fixture.WordSpecLike$$anon$1.apply(WordSpecLike.scala:1011)
    at org.scalatest.words.ShouldVerb$StringShouldWrapperForVerb$class.should(ShouldVerb.scala:192)
    at org.scalatest.Matchers$StringShouldWrapper.should(Matchers.scala:6946)
    at envisia.loki.DocumentMockitoSpec.<init>(DocumentMockitoSpec.scala:40)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
    at java.lang.Class.newInstance(Class.java:442)
    at org.scalatest.tools.Framework$ScalaTestTask.execute(Framework.scala:641)
    at sbt.ForkMain$Run$2.call(ForkMain.java:294)
    at sbt.ForkMain$Run$2.call(ForkMain.java:284)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Caused by: sbt.ForkMain$ForkError: Falscher Benutzer Name oder Passwort
Wrong user name or password [28000-187]
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:345)
    at org.h2.message.DbException.get(DbException.java:179)
    at org.h2.message.DbException.get(DbException.java:155)
    at org.h2.message.DbException.get(DbException.java:144)
    at org.h2.engine.Engine.validateUserAndPassword(Engine.java:319)
    at org.h2.engine.Engine.createSessionAndValidate(Engine.java:153)
    at org.h2.engine.Engine.createSession(Engine.java:128)
    at org.h2.engine.Engine.createSession(Engine.java:26)
    at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:347)
    at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:108)
    at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:92)
    at org.h2.Driver.connect(Driver.java:72)
    at org.flywaydb.core.internal.util.jdbc.DriverDataSource.getConnectionFromDriver(DriverDataSource.java:295)
    at org.flywaydb.core.internal.util.jdbc.DriverDataSource.getConnection(DriverDataSource.java:257)
    at org.flywaydb.core.internal.util.jdbc.JdbcUtils.openConnection(JdbcUtils.java:50)
    at org.flywaydb.core.Flyway.execute(Flyway.java:1287)
    at org.flywaydb.core.Flyway.migrate(Flyway.java:919)
    at org.flywaydb.play.PlayInitializer$$anonfun$org$flywaydb$play$PlayInitializer$$migrateAutomatically$1.apply(PlayInitializer.scala:125)
    at org.flywaydb.play.PlayInitializer$$anonfun$org$flywaydb$play$PlayInitializer$$migrateAutomatically$1.apply(PlayInitializer.scala:124)
    at scala.Option.foreach(Option.scala:257)
    at org.flywaydb.play.PlayInitializer.org$flywaydb$play$PlayInitializer$$migrateAutomatically(PlayInitializer.scala:124)
    at org.flywaydb.play.PlayInitializer$$anonfun$onStart$1.apply(PlayInitializer.scala:116)
    at org.flywaydb.play.PlayInitializer$$anonfun$onStart$1.apply(PlayInitializer.scala:114)
    at scala.collection.Iterator$class.foreach(Iterator.scala:750)
    at scala.collection.AbstractIterator.foreach(Iterator.scala:1202)
    at scala.collection.MapLike$DefaultKeySet.foreach(MapLike.scala:174)
    at org.flywaydb.play.PlayInitializer.onStart(PlayInitializer.scala:114)
    at org.flywaydb.play.PlayInitializer.<init>(PlayInitializer.scala:133)
    at org.flywaydb.play.PlayInitializer$$FastClassByGuice$$fd53e8fe.newInstance(<generated>)
    at com.google.inject.internal.cglib.reflect.$FastConstructor.newInstance(FastConstructor.java:40)
    at com.google.inject.internal.DefaultConstructionProxyFactory$1.newInstance(DefaultConstructionProxyFactory.java:61)
    at com.google.inject.internal.ConstructorInjector.provision(ConstructorInjector.java:105)
    at com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:85)
    at com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:267)
    at com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46)
    at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1103)
    at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
    at com.google.inject.internal.SingletonScope$1.get(SingletonScope.java:145)
    at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:41)
    at com.google.inject.internal.InternalInjectorCreator$1.call(InternalInjectorCreator.java:205)
    at com.google.inject.internal.InternalInjectorCreator$1.call(InternalInjectorCreator.java:199)
    at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1092)
    at com.google.inject.internal.InternalInjectorCreator.loadEagerSingletons(InternalInjectorCreator.java:199)
    at com.google.inject.internal.InternalInjectorCreator.injectDynamically(InternalInjectorCreator.java:180)
    at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:110)
    at com.google.inject.Guice.createInjector(Guice.java:96)
    at com.google.inject.Guice.createInjector(Guice.java:73)
    at com.google.inject.Guice.createInjector(Guice.java:62)
    at play.api.inject.guice.GuiceBuilder.injector(GuiceInjectorBuilder.scala:126)
    at play.api.inject.guice.GuiceApplicationBuilder.build(GuiceApplicationBuilder.scala:93)
    at envisia.loki.DocumentMockitoSpec.application(DocumentMockitoSpec.scala:34)
    at envisia.loki.DocumentMockitoSpec$$anonfun$1$$anon$1.<init>(DocumentMockitoSpec.scala:41)
    at envisia.loki.DocumentMockitoSpec$$anonfun$1.apply$mcV$sp(DocumentMockitoSpec.scala:41)
    at org.scalatest.SuperEngine.registerNestedBranch(Engine.scala:613)
    at org.scalatest.fixture.WordSpecLike$class.org$scalatest$fixture$WordSpecLike$$registerBranch(WordSpecLike.scala:155)
    at org.scalatest.fixture.WordSpecLike$$anon$1.apply(WordSpecLike.scala:1011)
    at org.scalatest.words.ShouldVerb$StringShouldWrapperForVerb$class.should(ShouldVerb.scala:192)
    at org.scalatest.Matchers$StringShouldWrapper.should(Matchers.scala:6946)
    at envisia.loki.DocumentMockitoSpec.<init>(DocumentMockitoSpec.scala:40)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
    at java.lang.Class.newInstance(Class.java:442)
    at org.scalatest.tools.Framework$ScalaTestTask.execute(Framework.scala:641)
    at sbt.ForkMain$Run$2.call(ForkMain.java:294)
    at sbt.ForkMain$Run$2.call(ForkMain.java:284)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
[error] Uncaught exception when running envisia.loki.TemplateDatabaseSpec: com.google.inject.CreationException: Unable to create injector, see the following errors:
[error] 
[error] 1) Error injecting constructor, org.flywaydb.core.api.FlywayException: Unable to obtain Jdbc connection from DataSource (jdbc:h2:mem:play-test--948704778;MODE=PostgreSQL;DB_CLOSE_DELAY=-1) for user 'null': Falscher Benutzer Name oder Passwort
[error] Wrong user name or password [28000-187]
[error]   at org.flywaydb.play.PlayInitializer.<init>(PlayInitializer.scala:31)
[error]   at org.flywaydb.play.PlayModule.bindings(PlayModule.scala:24):
[error] Binding(class org.flywaydb.play.PlayInitializer to self eagerly) (via modules: com.google.inject.util.Modules$OverrideModule -> play.api.inject.guice.GuiceableModuleConversions$$anon$1)
[error]   while locating org.flywaydb.play.PlayInitializer
[error] 
[error] 1 error
[info] application - Creating Pool for datasource 'default'
[debug] application - Directory for migration files found. db/migration/default
sbt.ForkMain$ForkError: Unable to create injector, see the following errors:

1) Error injecting constructor, org.flywaydb.core.api.FlywayException: Unable to obtain Jdbc connection from DataSource (jdbc:h2:mem:play-test--948704778;MODE=PostgreSQL;DB_CLOSE_DELAY=-1) for user 'null': Falscher Benutzer Name oder Passwort
Wrong user name or password [28000-187]
  at org.flywaydb.play.PlayInitializer.<init>(PlayInitializer.scala:31)
  at org.flywaydb.play.PlayModule.bindings(PlayModule.scala:24):
Binding(class org.flywaydb.play.PlayInitializer to self eagerly) (via modules: com.google.inject.util.Modules$OverrideModule -> play.api.inject.guice.GuiceableModuleConversions$$anon$1)
  while locating org.flywaydb.play.PlayInitializer

1 error
    at com.google.inject.internal.Errors.throwCreationExceptionIfErrorsExist(Errors.java:466)
    at com.google.inject.internal.InternalInjectorCreator.injectDynamically(InternalInjectorCreator.java:184)
    at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:110)
    at com.google.inject.Guice.createInjector(Guice.java:96)
    at com.google.inject.Guice.createInjector(Guice.java:73)
    at com.google.inject.Guice.createInjector(Guice.java:62)
    at play.api.inject.guice.GuiceBuilder.injector(GuiceInjectorBuilder.scala:126)
    at play.api.inject.guice.GuiceApplicationBuilder.build(GuiceApplicationBuilder.scala:93)
    at envisia.loki.TemplateDatabaseSpec.application(TemplateDatabaseSpec.scala:25)
    at envisia.loki.TemplateDatabaseSpec$$anonfun$1$$anon$1.<init>(TemplateDatabaseSpec.scala:29)
    at envisia.loki.TemplateDatabaseSpec$$anonfun$1.apply$mcV$sp(TemplateDatabaseSpec.scala:29)
    at org.scalatest.SuperEngine.registerNestedBranch(Engine.scala:613)
    at org.scalatest.fixture.WordSpecLike$class.org$scalatest$fixture$WordSpecLike$$registerBranch(WordSpecLike.scala:155)
    at org.scalatest.fixture.WordSpecLike$$anon$1.apply(WordSpecLike.scala:1011)
    at org.scalatest.words.ShouldVerb$StringShouldWrapperForVerb$class.should(ShouldVerb.scala:192)
    at org.scalatest.Matchers$StringShouldWrapper.should(Matchers.scala:6946)
    at envisia.loki.TemplateDatabaseSpec.<init>(TemplateDatabaseSpec.scala:27)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
    at java.lang.Class.newInstance(Class.java:442)
    at org.scalatest.tools.Framework$ScalaTestTask.execute(Framework.scala:641)
    at sbt.ForkMain$Run$2.call(ForkMain.java:294)
    at sbt.ForkMain$Run$2.call(ForkMain.java:284)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Caused by: sbt.ForkMain$ForkError: Unable to obtain Jdbc connection from DataSource (jdbc:h2:mem:play-test--948704778;MODE=PostgreSQL;DB_CLOSE_DELAY=-1) for user 'null': Falscher Benutzer Name oder Passwort
Wrong user name or password [28000-187]
    at org.flywaydb.core.internal.util.jdbc.DriverDataSource.getConnectionFromDriver(DriverDataSource.java:298)
    at org.flywaydb.core.internal.util.jdbc.DriverDataSource.getConnection(DriverDataSource.java:257)
    at org.flywaydb.core.internal.util.jdbc.JdbcUtils.openConnection(JdbcUtils.java:50)
    at org.flywaydb.core.Flyway.execute(Flyway.java:1287)
    at org.flywaydb.core.Flyway.migrate(Flyway.java:919)
    at org.flywaydb.play.PlayInitializer$$anonfun$org$flywaydb$play$PlayInitializer$$migrateAutomatically$1.apply(PlayInitializer.scala:125)
    at org.flywaydb.play.PlayInitializer$$anonfun$org$flywaydb$play$PlayInitializer$$migrateAutomatically$1.apply(PlayInitializer.scala:124)
    at scala.Option.foreach(Option.scala:257)
    at org.flywaydb.play.PlayInitializer.org$flywaydb$play$PlayInitializer$$migrateAutomatically(PlayInitializer.scala:124)
    at org.flywaydb.play.PlayInitializer$$anonfun$onStart$1.apply(PlayInitializer.scala:116)
    at org.flywaydb.play.PlayInitializer$$anonfun$onStart$1.apply(PlayInitializer.scala:114)
    at scala.collection.Iterator$class.foreach(Iterator.scala:750)
    at scala.collection.AbstractIterator.foreach(Iterator.scala:1202)
    at scala.collection.MapLike$DefaultKeySet.foreach(MapLike.scala:174)
    at org.flywaydb.play.PlayInitializer.onStart(PlayInitializer.scala:114)
    at org.flywaydb.play.PlayInitializer.<init>(PlayInitializer.scala:133)
    at org.flywaydb.play.PlayInitializer$$FastClassByGuice$$fd53e8fe.newInstance(<generated>)
    at com.google.inject.internal.cglib.reflect.$FastConstructor.newInstance(FastConstructor.java:40)
    at com.google.inject.internal.DefaultConstructionProxyFactory$1.newInstance(DefaultConstructionProxyFactory.java:61)
    at com.google.inject.internal.ConstructorInjector.provision(ConstructorInjector.java:105)
    at com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:85)
    at com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:267)
    at com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46)
    at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1103)
    at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
    at com.google.inject.internal.SingletonScope$1.get(SingletonScope.java:145)
    at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:41)
    at com.google.inject.internal.InternalInjectorCreator$1.call(InternalInjectorCreator.java:205)
    at com.google.inject.internal.InternalInjectorCreator$1.call(InternalInjectorCreator.java:199)
    at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1092)
    at com.google.inject.internal.InternalInjectorCreator.loadEagerSingletons(InternalInjectorCreator.java:199)
    at com.google.inject.internal.InternalInjectorCreator.injectDynamically(InternalInjectorCreator.java:180)
    at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:110)
    at com.google.inject.Guice.createInjector(Guice.java:96)
    at com.google.inject.Guice.createInjector(Guice.java:73)
    at com.google.inject.Guice.createInjector(Guice.java:62)
    at play.api.inject.guice.GuiceBuilder.injector(GuiceInjectorBuilder.scala:126)
    at play.api.inject.guice.GuiceApplicationBuilder.build(GuiceApplicationBuilder.scala:93)
    at envisia.loki.TemplateDatabaseSpec.application(TemplateDatabaseSpec.scala:25)
    at envisia.loki.TemplateDatabaseSpec$$anonfun$1$$anon$1.<init>(TemplateDatabaseSpec.scala:29)
    at envisia.loki.TemplateDatabaseSpec$$anonfun$1.apply$mcV$sp(TemplateDatabaseSpec.scala:29)
    at org.scalatest.SuperEngine.registerNestedBranch(Engine.scala:613)
    at org.scalatest.fixture.WordSpecLike$class.org$scalatest$fixture$WordSpecLike$$registerBranch(WordSpecLike.scala:155)
    at org.scalatest.fixture.WordSpecLike$$anon$1.apply(WordSpecLike.scala:1011)
    at org.scalatest.words.ShouldVerb$StringShouldWrapperForVerb$class.should(ShouldVerb.scala:192)
    at org.scalatest.Matchers$StringShouldWrapper.should(Matchers.scala:6946)
    at envisia.loki.TemplateDatabaseSpec.<init>(TemplateDatabaseSpec.scala:27)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
    at java.lang.Class.newInstance(Class.java:442)
    at org.scalatest.tools.Framework$ScalaTestTask.execute(Framework.scala:641)
    at sbt.ForkMain$Run$2.call(ForkMain.java:294)
    at sbt.ForkMain$Run$2.call(ForkMain.java:284)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Caused by: sbt.ForkMain$ForkError: Falscher Benutzer Name oder Passwort
Wrong user name or password [28000-187]
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:345)
    at org.h2.message.DbException.get(DbException.java:179)
    at org.h2.message.DbException.get(DbException.java:155)
    at org.h2.message.DbException.get(DbException.java:144)
    at org.h2.engine.Engine.validateUserAndPassword(Engine.java:319)
    at org.h2.engine.Engine.createSessionAndValidate(Engine.java:153)
    at org.h2.engine.Engine.createSession(Engine.java:128)
    at org.h2.engine.Engine.createSession(Engine.java:26)
    at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:347)
    at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:108)
    at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:92)
    at org.h2.Driver.connect(Driver.java:72)
    at org.flywaydb.core.internal.util.jdbc.DriverDataSource.getConnectionFromDriver(DriverDataSource.java:295)
    at org.flywaydb.core.internal.util.jdbc.DriverDataSource.getConnection(DriverDataSource.java:257)
    at org.flywaydb.core.internal.util.jdbc.JdbcUtils.openConnection(JdbcUtils.java:50)
    at org.flywaydb.core.Flyway.execute(Flyway.java:1287)
    at org.flywaydb.core.Flyway.migrate(Flyway.java:919)
    at org.flywaydb.play.PlayInitializer$$anonfun$org$flywaydb$play$PlayInitializer$$migrateAutomatically$1.apply(PlayInitializer.scala:125)
    at org.flywaydb.play.PlayInitializer$$anonfun$org$flywaydb$play$PlayInitializer$$migrateAutomatically$1.apply(PlayInitializer.scala:124)
    at scala.Option.foreach(Option.scala:257)
    at org.flywaydb.play.PlayInitializer.org$flywaydb$play$PlayInitializer$$migrateAutomatically(PlayInitializer.scala:124)
    at org.flywaydb.play.PlayInitializer$$anonfun$onStart$1.apply(PlayInitializer.scala:116)
    at org.flywaydb.play.PlayInitializer$$anonfun$onStart$1.apply(PlayInitializer.scala:114)
    at scala.collection.Iterator$class.foreach(Iterator.scala:750)
    at scala.collection.AbstractIterator.foreach(Iterator.scala:1202)
    at scala.collection.MapLike$DefaultKeySet.foreach(MapLike.scala:174)
    at org.flywaydb.play.PlayInitializer.onStart(PlayInitializer.scala:114)
    at org.flywaydb.play.PlayInitializer.<init>(PlayInitializer.scala:133)
    at org.flywaydb.play.PlayInitializer$$FastClassByGuice$$fd53e8fe.newInstance(<generated>)
    at com.google.inject.internal.cglib.reflect.$FastConstructor.newInstance(FastConstructor.java:40)
    at com.google.inject.internal.DefaultConstructionProxyFactory$1.newInstance(DefaultConstructionProxyFactory.java:61)
    at com.google.inject.internal.ConstructorInjector.provision(ConstructorInjector.java:105)
    at com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:85)
    at com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:267)
    at com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46)
    at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1103)
    at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
    at com.google.inject.internal.SingletonScope$1.get(SingletonScope.java:145)
    at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:41)
    at com.google.inject.internal.InternalInjectorCreator$1.call(InternalInjectorCreator.java:205)
    at com.google.inject.internal.InternalInjectorCreator$1.call(InternalInjectorCreator.java:199)
    at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1092)
    at com.google.inject.internal.InternalInjectorCreator.loadEagerSingletons(InternalInjectorCreator.java:199)
    at com.google.inject.internal.InternalInjectorCreator.injectDynamically(InternalInjectorCreator.java:180)
    at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:110)
    at com.google.inject.Guice.createInjector(Guice.java:96)
    at com.google.inject.Guice.createInjector(Guice.java:73)
    at com.google.inject.Guice.createInjector(Guice.java:62)
    at play.api.inject.guice.GuiceBuilder.injector(GuiceInjectorBuilder.scala:126)
    at play.api.inject.guice.GuiceApplicationBuilder.build(GuiceApplicationBuilder.scala:93)
    at envisia.loki.TemplateDatabaseSpec.application(TemplateDatabaseSpec.scala:25)
    at envisia.loki.TemplateDatabaseSpec$$anonfun$1$$anon$1.<init>(TemplateDatabaseSpec.scala:29)
    at envisia.loki.TemplateDatabaseSpec$$anonfun$1.apply$mcV$sp(TemplateDatabaseSpec.scala:29)
    at org.scalatest.SuperEngine.registerNestedBranch(Engine.scala:613)
    at org.scalatest.fixture.WordSpecLike$class.org$scalatest$fixture$WordSpecLike$$registerBranch(WordSpecLike.scala:155)
    at org.scalatest.fixture.WordSpecLike$$anon$1.apply(WordSpecLike.scala:1011)
    at org.scalatest.words.ShouldVerb$StringShouldWrapperForVerb$class.should(ShouldVerb.scala:192)
    at org.scalatest.Matchers$StringShouldWrapper.should(Matchers.scala:6946)
    at envisia.loki.TemplateDatabaseSpec.<init>(TemplateDatabaseSpec.scala:27)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
    at java.lang.Class.newInstance(Class.java:442)
    at org.scalatest.tools.Framework$ScalaTestTask.execute(Framework.scala:641)
    at sbt.ForkMain$Run$2.call(ForkMain.java:294)
    at sbt.ForkMain$Run$2.call(ForkMain.java:284)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
[error] Uncaught exception when running envisia.loki.TemplateMockitoSpec: com.google.inject.CreationException: Unable to create injector, see the following errors:
[error] 
[error] 1) Error injecting constructor, org.flywaydb.core.api.FlywayException: Unable to obtain Jdbc connection from DataSource (jdbc:h2:mem:play-test-404376192;MODE=PostgreSQL;DB_CLOSE_DELAY=-1) for user 'null': Falscher Benutzer Name oder Passwort
[error] Wrong user name or password [28000-187]
[error]   at org.flywaydb.play.PlayInitializer.<init>(PlayInitializer.scala:31)
[error]   at org.flywaydb.play.PlayModule.bindings(PlayModule.scala:24):
[error] Binding(class org.flywaydb.play.PlayInitializer to self eagerly) (via modules: com.google.inject.util.Modules$OverrideModule -> play.api.inject.guice.GuiceableModuleConversions$$anon$1)
[error]   while locating org.flywaydb.play.PlayInitializer
[error] 
[error] 1 error
sbt.ForkMain$ForkError: Unable to create injector, see the following errors:

1) Error injecting constructor, org.flywaydb.core.api.FlywayException: Unable to obtain Jdbc connection from DataSource (jdbc:h2:mem:play-test-404376192;MODE=PostgreSQL;DB_CLOSE_DELAY=-1) for user 'null': Falscher Benutzer Name oder Passwort
Wrong user name or password [28000-187]
  at org.flywaydb.play.PlayInitializer.<init>(PlayInitializer.scala:31)
  at org.flywaydb.play.PlayModule.bindings(PlayModule.scala:24):
Binding(class org.flywaydb.play.PlayInitializer to self eagerly) (via modules: com.google.inject.util.Modules$OverrideModule -> play.api.inject.guice.GuiceableModuleConversions$$anon$1)
  while locating org.flywaydb.play.PlayInitializer

1 error
    at com.google.inject.internal.Errors.throwCreationExceptionIfErrorsExist(Errors.java:466)
    at com.google.inject.internal.InternalInjectorCreator.injectDynamically(InternalInjectorCreator.java:184)
    at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:110)
    at com.google.inject.Guice.createInjector(Guice.java:96)
    at com.google.inject.Guice.createInjector(Guice.java:73)
    at com.google.inject.Guice.createInjector(Guice.java:62)
    at play.api.inject.guice.GuiceBuilder.injector(GuiceInjectorBuilder.scala:126)
    at play.api.inject.guice.GuiceApplicationBuilder.build(GuiceApplicationBuilder.scala:93)
    at envisia.loki.TemplateMockitoSpec.application(TemplateMockitoSpec.scala:31)
    at envisia.loki.TemplateMockitoSpec$$anonfun$1$$anon$1.<init>(TemplateMockitoSpec.scala:46)
    at envisia.loki.TemplateMockitoSpec$$anonfun$1.apply$mcV$sp(TemplateMockitoSpec.scala:46)
    at org.scalatest.SuperEngine.registerNestedBranch(Engine.scala:613)
    at org.scalatest.fixture.WordSpecLike$class.org$scalatest$fixture$WordSpecLike$$registerBranch(WordSpecLike.scala:155)
    at org.scalatest.fixture.WordSpecLike$$anon$1.apply(WordSpecLike.scala:1011)
    at org.scalatest.words.ShouldVerb$StringShouldWrapperForVerb$class.should(ShouldVerb.scala:192)
    at org.scalatest.Matchers$StringShouldWrapper.should(Matchers.scala:6946)
    at envisia.loki.TemplateMockitoSpec.<init>(TemplateMockitoSpec.scala:45)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
    at java.lang.Class.newInstance(Class.java:442)
    at org.scalatest.tools.Framework$ScalaTestTask.execute(Framework.scala:641)
    at sbt.ForkMain$Run$2.call(ForkMain.java:294)
    at sbt.ForkMain$Run$2.call(ForkMain.java:284)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Caused by: sbt.ForkMain$ForkError: Unable to obtain Jdbc connection from DataSource (jdbc:h2:mem:play-test-404376192;MODE=PostgreSQL;DB_CLOSE_DELAY=-1) for user 'null': Falscher Benutzer Name oder Passwort
Wrong user name or password [28000-187]
    at org.flywaydb.core.internal.util.jdbc.DriverDataSource.getConnectionFromDriver(DriverDataSource.java:298)
    at org.flywaydb.core.internal.util.jdbc.DriverDataSource.getConnection(DriverDataSource.java:257)
    at org.flywaydb.core.internal.util.jdbc.JdbcUtils.openConnection(JdbcUtils.java:50)
    at org.flywaydb.core.Flyway.execute(Flyway.java:1287)
    at org.flywaydb.core.Flyway.migrate(Flyway.java:919)
    at org.flywaydb.play.PlayInitializer$$anonfun$org$flywaydb$play$PlayInitializer$$migrateAutomatically$1.apply(PlayInitializer.scala:125)
    at org.flywaydb.play.PlayInitializer$$anonfun$org$flywaydb$play$PlayInitializer$$migrateAutomatically$1.apply(PlayInitializer.scala:124)
    at scala.Option.foreach(Option.scala:257)
    at org.flywaydb.play.PlayInitializer.org$flywaydb$play$PlayInitializer$$migrateAutomatically(PlayInitializer.scala:124)
    at org.flywaydb.play.PlayInitializer$$anonfun$onStart$1.apply(PlayInitializer.scala:116)
    at org.flywaydb.play.PlayInitializer$$anonfun$onStart$1.apply(PlayInitializer.scala:114)
    at scala.collection.Iterator$class.foreach(Iterator.scala:750)
    at scala.collection.AbstractIterator.foreach(Iterator.scala:1202)
    at scala.collection.MapLike$DefaultKeySet.foreach(MapLike.scala:174)
    at org.flywaydb.play.PlayInitializer.onStart(PlayInitializer.scala:114)
    at org.flywaydb.play.PlayInitializer.<init>(PlayInitializer.scala:133)
    at org.flywaydb.play.PlayInitializer$$FastClassByGuice$$fd53e8fe.newInstance(<generated>)
    at com.google.inject.internal.cglib.reflect.$FastConstructor.newInstance(FastConstructor.java:40)
    at com.google.inject.internal.DefaultConstructionProxyFactory$1.newInstance(DefaultConstructionProxyFactory.java:61)
    at com.google.inject.internal.ConstructorInjector.provision(ConstructorInjector.java:105)
    at com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:85)
    at com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:267)
    at com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46)
    at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1103)
    at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
    at com.google.inject.internal.SingletonScope$1.get(SingletonScope.java:145)
    at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:41)
    at com.google.inject.internal.InternalInjectorCreator$1.call(InternalInjectorCreator.java:205)
    at com.google.inject.internal.InternalInjectorCreator$1.call(InternalInjectorCreator.java:199)
    at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1092)
    at com.google.inject.internal.InternalInjectorCreator.loadEagerSingletons(InternalInjectorCreator.java:199)
    at com.google.inject.internal.InternalInjectorCreator.injectDynamically(InternalInjectorCreator.java:180)
    at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:110)
    at com.google.inject.Guice.createInjector(Guice.java:96)
    at com.google.inject.Guice.createInjector(Guice.java:73)
    at com.google.inject.Guice.createInjector(Guice.java:62)
    at play.api.inject.guice.GuiceBuilder.injector(GuiceInjectorBuilder.scala:126)
    at play.api.inject.guice.GuiceApplicationBuilder.build(GuiceApplicationBuilder.scala:93)
    at envisia.loki.TemplateMockitoSpec.application(TemplateMockitoSpec.scala:31)
    at envisia.loki.TemplateMockitoSpec$$anonfun$1$$anon$1.<init>(TemplateMockitoSpec.scala:46)
    at envisia.loki.TemplateMockitoSpec$$anonfun$1.apply$mcV$sp(TemplateMockitoSpec.scala:46)
    at org.scalatest.SuperEngine.registerNestedBranch(Engine.scala:613)
    at org.scalatest.fixture.WordSpecLike$class.org$scalatest$fixture$WordSpecLike$$registerBranch(WordSpecLike.scala:155)
    at org.scalatest.fixture.WordSpecLike$$anon$1.apply(WordSpecLike.scala:1011)
    at org.scalatest.words.ShouldVerb$StringShouldWrapperForVerb$class.should(ShouldVerb.scala:192)
    at org.scalatest.Matchers$StringShouldWrapper.should(Matchers.scala:6946)
    at envisia.loki.TemplateMockitoSpec.<init>(TemplateMockitoSpec.scala:45)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
    at java.lang.Class.newInstance(Class.java:442)
    at org.scalatest.tools.Framework$ScalaTestTask.execute(Framework.scala:641)
    at sbt.ForkMain$Run$2.call(ForkMain.java:294)
    at sbt.ForkMain$Run$2.call(ForkMain.java:284)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Caused by: sbt.ForkMain$ForkError: Falscher Benutzer Name oder Passwort
Wrong user name or password [28000-187]
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:345)
    at org.h2.message.DbException.get(DbException.java:179)
    at org.h2.message.DbException.get(DbException.java:155)
    at org.h2.message.DbException.get(DbException.java:144)
    at org.h2.engine.Engine.validateUserAndPassword(Engine.java:319)
    at org.h2.engine.Engine.createSessionAndValidate(Engine.java:153)
    at org.h2.engine.Engine.createSession(Engine.java:128)
    at org.h2.engine.Engine.createSession(Engine.java:26)
    at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:347)
    at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:108)
    at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:92)
    at org.h2.Driver.connect(Driver.java:72)
    at org.flywaydb.core.internal.util.jdbc.DriverDataSource.getConnectionFromDriver(DriverDataSource.java:295)
    at org.flywaydb.core.internal.util.jdbc.DriverDataSource.getConnection(DriverDataSource.java:257)
    at org.flywaydb.core.internal.util.jdbc.JdbcUtils.openConnection(JdbcUtils.java:50)
    at org.flywaydb.core.Flyway.execute(Flyway.java:1287)
    at org.flywaydb.core.Flyway.migrate(Flyway.java:919)
    at org.flywaydb.play.PlayInitializer$$anonfun$org$flywaydb$play$PlayInitializer$$migrateAutomatically$1.apply(PlayInitializer.scala:125)
    at org.flywaydb.play.PlayInitializer$$anonfun$org$flywaydb$play$PlayInitializer$$migrateAutomatically$1.apply(PlayInitializer.scala:124)
    at scala.Option.foreach(Option.scala:257)
    at org.flywaydb.play.PlayInitializer.org$flywaydb$play$PlayInitializer$$migrateAutomatically(PlayInitializer.scala:124)
    at org.flywaydb.play.PlayInitializer$$anonfun$onStart$1.apply(PlayInitializer.scala:116)
    at org.flywaydb.play.PlayInitializer$$anonfun$onStart$1.apply(PlayInitializer.scala:114)
    at scala.collection.Iterator$class.foreach(Iterator.scala:750)
    at scala.collection.AbstractIterator.foreach(Iterator.scala:1202)
    at scala.collection.MapLike$DefaultKeySet.foreach(MapLike.scala:174)
    at org.flywaydb.play.PlayInitializer.onStart(PlayInitializer.scala:114)
    at org.flywaydb.play.PlayInitializer.<init>(PlayInitializer.scala:133)
    at org.flywaydb.play.PlayInitializer$$FastClassByGuice$$fd53e8fe.newInstance(<generated>)
    at com.google.inject.internal.cglib.reflect.$FastConstructor.newInstance(FastConstructor.java:40)
    at com.google.inject.internal.DefaultConstructionProxyFactory$1.newInstance(DefaultConstructionProxyFactory.java:61)
    at com.google.inject.internal.ConstructorInjector.provision(ConstructorInjector.java:105)
    at com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:85)
    at com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:267)
    at com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46)
    at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1103)
    at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
    at com.google.inject.internal.SingletonScope$1.get(SingletonScope.java:145)
    at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:41)
    at com.google.inject.internal.InternalInjectorCreator$1.call(InternalInjectorCreator.java:205)
    at com.google.inject.internal.InternalInjectorCreator$1.call(InternalInjectorCreator.java:199)
    at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1092)
    at com.google.inject.internal.InternalInjectorCreator.loadEagerSingletons(InternalInjectorCreator.java:199)
    at com.google.inject.internal.InternalInjectorCreator.injectDynamically(InternalInjectorCreator.java:180)
    at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:110)
    at com.google.inject.Guice.createInjector(Guice.java:96)
    at com.google.inject.Guice.createInjector(Guice.java:73)
    at com.google.inject.Guice.createInjector(Guice.java:62)
    at play.api.inject.guice.GuiceBuilder.injector(GuiceInjectorBuilder.scala:126)
    at play.api.inject.guice.GuiceApplicationBuilder.build(GuiceApplicationBuilder.scala:93)
    at envisia.loki.TemplateMockitoSpec.application(TemplateMockitoSpec.scala:31)
    at envisia.loki.TemplateMockitoSpec$$anonfun$1$$anon$1.<init>(TemplateMockitoSpec.scala:46)
    at envisia.loki.TemplateMockitoSpec$$anonfun$1.apply$mcV$sp(TemplateMockitoSpec.scala:46)
    at org.scalatest.SuperEngine.registerNestedBranch(Engine.scala:613)
    at org.scalatest.fixture.WordSpecLike$class.org$scalatest$fixture$WordSpecLike$$registerBranch(WordSpecLike.scala:155)
    at org.scalatest.fixture.WordSpecLike$$anon$1.apply(WordSpecLike.scala:1011)
    at org.scalatest.words.ShouldVerb$StringShouldWrapperForVerb$class.should(ShouldVerb.scala:192)
    at org.scalatest.Matchers$StringShouldWrapper.should(Matchers.scala:6946)
    at envisia.loki.TemplateMockitoSpec.<init>(TemplateMockitoSpec.scala:45)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
    at java.lang.Class.newInstance(Class.java:442)
    at org.scalatest.tools.Framework$ScalaTestTask.execute(Framework.scala:641)
    at sbt.ForkMain$Run$2.call(ForkMain.java:294)
    at sbt.ForkMain$Run$2.call(ForkMain.java:284)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
[info] ScalaTest
[info] Run completed in 5 seconds, 97 milliseconds.
[info] Total number of tests run: 0
[info] Suites: completed 0, aborted 0
[info] Tests: succeeded 0, failed 0, canceled 0, ignored 0, pending 0
[info] No tests were executed.
[error] Error: Total 3, Failed 0, Errors 3, Passed 0
[error] Error during tests:
[error]     envisia.loki.TemplateDatabaseSpec
[error]     envisia.loki.TemplateMockitoSpec
[error]     envisia.loki.DocumentMockitoSpec
[error] (test:test) sbt.TestsFailedException: Tests unsuccessful
[error] Total time: 6 s, completed 22.05.2015 15:59:18

Add new configuration parameter - mixed

Please add the following flyway configuration parameter that allows mixing transactional and non-transactional statements within the same migration.

mixed

Support compile-time DI

The best practice to ease compile-time DI is to provide a trait named after the name of your module and ending with Components and providing a lazy val instantiating the module.

Release for Play 2.4-RC2

Great to see this plugin here.

Now that Play 2.4 has reached RC2, is it possible to have a release of this.
Would prefer to test a non-snapshot version.

Thanks again for this wonderful stuff

Update Readme.md for configuration with MySQL

Thanks for supporting also Play! version 3.0.x!
As I tried to make it run for MySql, I noticed that there is an additional dependency needed in build.sbt:

libraryDependencies += "org.flywaydb" % "flyway-mysql" % "9.16.3"

May you update the README to makes this clear for other users? The version must be in sync with what is used in flyway-play as otherwise it will not compile

Play doesn't retry to establish failed database connection when starting

Steps to reproduce:

  1. Have database server off/inaccessible.
  2. Launch app
  3. When connecting, the following error will be shown:

image

(FlywaySqlException: Unable to obtain connection from database ...)
  1. Turn database on
  2. Refresh page / wait for a long time - the same error persists.

If flyway isn't enabled, the app will successfully reconnect to the database once it comes online.
Is there some setting I should use to tell flyway to attempt to reconnect ever so often?

Using flyway-play 5.0.0, Play 2.6.18. Tried both of these configurations:

db {
  nevos {
    url = "jdbc:postgresql://localhost:5432/nevos"
    user = "admin"
    password = "smth"
    driver = org.postgresql.Driver
    connectionPool = disabled
    keepAliveConnection = true
  }
}

or with dedicated connection pool:

db {
  nevos {
    url = "jdbc:postgresql://localhost:5432/nevos"
    user = "admin"
    password = "smth"
    driver = org.postgresql.Driver
    pool = hikaricp
    keepAliveConnection = true
    hikaricp {
      initializationFailTimeout = -1
      allowPoolSuspension = true
    }
  }
}

Hack a `flywayPrefixToMigrationScript` other than `db/migration`?

Greetings! ☺️

I would like to keep my migrations in conf/schema/sql rather than in conf/db/migrations (because I also have a conf/schema/json and I want them to be parallel). Can I accomplish this with flyway-play as it stands today?

My best attempt so far is this config:

db.data.driver = org.postgresql.Driver
db.data.migration.schemas = ["myschema"]
db.data.migration.initOnMigrate = true
db.data.migration.auto = true
db.data.migration.locations = ["../../../schema/sql"]

Which gives me this log output:

2018-08-16 16:26:02 -0400 [WARN] from org.flywaydb.core.internal.util.scanner.classpath.ClassPathScanner in ForkJoinPool-1-worker-1 - Unable to resolve location classpath:db/migration/data//////////schema/sql
2018-08-16 16:26:02 -0400 [INFO] from org.flywaydb.core.internal.command.DbSchemas in ForkJoinPool-1-worker-1 - Creating schema "myschema" ...
2018-08-16 16:26:02 -0400 [INFO] from org.flywaydb.core.internal.metadatatable.MetaDataTableImpl in ForkJoinPool-1-worker-1 - Creating Metadata table: "myschema"."schema_version"
2018-08-16 16:26:02 -0400 [INFO] from org.flywaydb.core.internal.command.DbMigrate in ForkJoinPool-1-worker-1 - Current version of schema "myschema": null
2018-08-16 16:26:02 -0400 [INFO] from org.flywaydb.core.internal.command.DbMigrate in ForkJoinPool-1-worker-1 - Schema "myschema" is up to date. No migration necessary.

My hunch is that this would require some changes to flyway-play but I figured I would pose the question!

Error when starting from scratch: CreationException: Unable to create injector, see the following errors:

Every time when I change one of my models and Play wants to re-apply the evolutions scripts I get the following error:

1) Error injecting constructor, @6mm01i5n4: Database 'default' needs migration!
  at org.flywaydb.play.PlayInitializer.<init>(PlayInitializer.scala:31)
  at org.flywaydb.play.PlayModule.bindings(PlayModule.scala:24):
Binding(class org.flywaydb.play.PlayInitializer to self eagerly) (via modules: com.google.inject.util.Modules$OverrideModule -> play.api.inject.guice.GuiceableModuleConversions$$anon$1)
  while locating org.flywaydb.play.PlayInitializer
Caused by: @6mm01i5n4: Database 'default' needs migration!
    at org.flywaydb.play.PlayInitializer$$anonfun$org$flywaydb$play$PlayInitializer$$checkState$1.apply(PlayInitializer.scala:104)
    at org.flywaydb.play.PlayInitializer$$anonfun$org$flywaydb$play$PlayInitializer$$checkState$1.apply(PlayInitializer.scala:101)
    at scala.Option.foreach(Option.scala:257)
...

What am I doing wrong, I would like to apply the generated .sql from Play and let Flyway run the scripts afterwards..

Repeatable migrations cause NPE when clicking on 'Other Operations'

When a repeatable migration is put into the migrations folder, clicking on 'Other Operations' in the flyway-play module ui causes a NullPointerException in info.template.scala. Removing the repeatable makes it work again. Tested with play framework 2.5.6.

play.api.http.HttpErrorHandlerExceptions$$anon$1: Execution exception[[NullPointerException: null]]
    at play.api.http.HttpErrorHandlerExceptions$.throwableToUsefulException(HttpErrorHandler.scala:280)
    at play.api.http.DefaultHttpErrorHandler.onServerError(HttpErrorHandler.scala:206)
    at play.core.server.Server$class.logExceptionAndGetResult$1(Server.scala:45)
    at play.core.server.Server$class.getHandlerFor(Server.scala:65)
    at play.core.server.NettyServer.getHandlerFor(NettyServer.scala:47)
    at play.core.server.netty.PlayRequestHandler.handle(PlayRequestHandler.scala:82)
    at play.core.server.netty.PlayRequestHandler.channelRead(PlayRequestHandler.scala:163)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:366)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:352)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:345)
    at com.typesafe.netty.http.HttpStreamsHandler.channelRead(HttpStreamsHandler.java:129)
    at com.typesafe.netty.http.HttpStreamsServerHandler.channelRead(HttpStreamsServerHandler.java:96)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:366)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:352)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:345)
    at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:102)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:366)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:352)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:345)
    at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:293)
    at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:267)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:366)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:352)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:345)
    at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1294)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:366)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:352)
    at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:911)
    at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:131)
    at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:572)
    at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:513)
    at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:427)
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:399)
    at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:140)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NullPointerException: null
    at org.flywaydb.play.views.html.info$$anonfun$apply$1.apply(info.template.scala:63)
    at org.flywaydb.play.views.html.info$$anonfun$apply$1.apply(info.template.scala:62)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234)
    at scala.collection.immutable.List.foreach(List.scala:381)
    at scala.collection.TraversableLike$class.map(TraversableLike.scala:234)
    at scala.collection.immutable.List.map(List.scala:285)
    at org.flywaydb.play.views.html.info.apply(info.template.scala:62)
    at org.flywaydb.play.FlywayWebCommand.handleWebCommand(FlywayWebCommand.scala:64)
    at play.core.DefaultWebCommands$$anonfun$handleWebCommand$1.apply(WebCommands.scala:40)
    at play.core.DefaultWebCommands$$anonfun$handleWebCommand$1.apply(WebCommands.scala:40)
    at scala.collection.immutable.Stream.flatMap(Stream.scala:489)
    at play.core.DefaultWebCommands.handleWebCommand(WebCommands.scala:40)
    at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$handleWebCommand$1$$anonfun$apply$7.apply(DevServerStart.scala:203)
    at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$handleWebCommand$1$$anonfun$apply$7.apply(DevServerStart.scala:203)
    at scala.Option.flatMap(Option.scala:171)
    at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$handleWebCommand$1.apply(DevServerStart.scala:203)
    at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$handleWebCommand$1.apply(DevServerStart.scala:203)
    at scala.Option.orElse(Option.scala:289)
    at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1.handleWebCommand(DevServerStart.scala:202)
    at play.core.server.Server$class.getHandlerFor(Server.scala:49)
    ... 31 common frames omitted

Flyway 6 support

Flyway 6 has been released in August 2019. It features support for many new DB version such as PostgreSQL 11 and 12. flyway-play should to be updated to support Flyway 6.

Add new configuration parameter - dbFolder

Hi,
I have play configured to deal with multiple modules. My migration folder structure is based on module names.
It would be very useful to add a new configuration parameter, called for instance dbFolder. That parameter would be used to set the path to the DB migrations.

Currenlty the path to the files are under
migrationFilesLocation = s"$flywayPrefixToMigrationScript/$dbName"

It would be useful to have like an alias, if configuration is set, use configuration value otherwise use dbName. If would a minor change
migrationFilesLocation = s"$flywayPrefixToMigrationScript/configuration.dbFolder"

With this new parameter i could have like this in my setup:

db.finance_ke.url = ....
db.finance_ke.migration.dbFolder = finance
db.finance_ma.url = ....
db.finance_ma.migration.dbFolder = finance
db.finance_eg_url = ....
db.finance_eg.migration.dbFolder = finance

So, i could have

+---- /conf
+--------- /db
+------------- /migration
+---------------------/finance
+---------------------------V1__testing.sql

What do you think? I need help on having folder name, not matching the DB name.
Check PR here #61

html views are not shown in Play!-Framework 2.8 with version 7.2.0

We used successfully flyway-play throught a lot of projects written in Play!-Framework versions 2.3 up to 2.6. With the newest version 2.8, th module does not seem to work properly:

  • in dev mode, if there is a migration to be applied, the usual html-view is not shown. Instead, an internal server error is returned as in prod mode. One can fix this by manually navigation to http://localhost:9000/@flyway and applying the script

Is there a way to resolve this?

Proposing to move this repo to the playframework org

Hi everyone and @tototoshi,

I am in contact with @alistair-RG from the Flyway team at Redgate. They want to have some tidy-up done this year and this is why we will very likely move this repo to the https://github.com/playframework/ organization.
After the move we will also change the groupid to org.playframework.

@tototoshi Even if we move this repo, can you continue to maintain it? I will help to set up GitHub actions workflows for publishing, etc. but is it ok if you stay the main maintainer of this repo?

Thanks!

Migrations not happening automatically in production

Plugins
addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.7.0")

build.sbt
libraryDependencies += "org.flywaydb" %% "flyway-play" % "5.3.1"

Running play application in Dev mode, migrations are prompted as expected.
Running same application in Prod mode, doesn't run migration scripts.

production.conf

play.modules.enabled += "org.flywaydb.play.PlayModule"
db.default.migration.initOnMigrate=true
db.default.migration.auto=true

Starting the server with:
./server -Dconfig.resource=production.conf

Startup logging:

[info] p.a.d.DefaultDBApi - Database [default] initialized at jdbc:postgresql://localhost/toprail
[info] application - Creating Pool for datasource 'default'
[info] play.api.Play - Application started (Prod) (no global state)
[info] p.c.s.AkkaHttpServer - Listening for HTTP on /0:0:0:0:0:0:0:0:9000
[error] c.s.h.t.d.PrintlnRequestLogger - org.postgresql.util.PSQLException: ERROR: relation "users" does not exist

Users table "should" have been created with migration scripts however they are not run.

This is happening on a blank database so it needs to init the flyway_schema_history table.

Any help much appreciated.

Configuration Scanner Overzealous On Identifying Databases

I've encountered a few... explosive failures when trying to use flyway-play while configuring pools and having other extra information in the db configuration section.

The Play Configuration Reference shows that many non-db entries can be present. Throwing an exception whenever one is encountered seems extreme, and also prejudices against other libraries making use of the space.

I initially encountered this while trying to write my own play adapter for postgresql-async (which admittedly isn't correct at handling this either at the time of this writing). For its configuration I'd decided that db.asyncPool should contain information configuring the async connection pool and hoped that my lib and this one could coexist nicely.

I think ideally this module should scan, searching for valid urls and drivers, and if it finds one but not the other, consider it an error, otherwise just log that the entry was skipped. Possibly the addition of a "db.name.flyway" boolean parameter, defaulting to true would allow silencing the logs or explicitly skipping the processing of unwanted database connections.

I'm wrapped up in my own fixes right now or I'd try to submit a patch.

EagerSingleton modules are started before Flyway finish running migrations

I use flyway-play version 3.2.0 with Play Framework version 2.5.15.

In my application, I have a module called ApplicationStart:

bind(ApplicationStart.class).asEagerSingleton();

In this ApplicationStart, I have many cleanup tasks that use the database.

Unfortunately, it seems that eagerSingletons modules are started BEFORE all the scripts from Flyway migrations are run. This means that sometimes, if a table is needed but not yet created, we get injection errors that a table is missing.

Is there any callback from the flyway plugin that I could use to know for sure that the migrations are completed and that I can safely run cleanup task at startup.

Update for Flyway 4

Flyway 4 has just been release, should update play-flyway to take this into account

Maven "flyway-play" may require scala postfix?

I've just "fixed" a problem I was having when trying to add flyway-play to my Play instance. I had been using the following in my build.sbt as instructed:

libraryDependencies ++= Seq( "org.flywaydb" %% "flyway-play" % "6.0.0" )

However, apparently "flyway-play" is not a maven path. Instead it appears that you also need to add "_[scala version]", so for example I am using Scala 2.13 so it became:

libraryDependencies ++= Seq( "org.flywaydb" %% "flyway-play_2.13" % "6.0.0" )

Without that change, sbt was unable to build the application due to being unable to locate the library.

Cannot override flywayUrl in different environments

I would like to be able to supply flywayUrl/user and password dependent on the environment the application is running.

The flyway command line supports arguments but I cannot find how to execute flywayMigrate with arguments.

Could you advise?

Thanks

Support for baselineOnMigrate

I've got such exception:

play.api.UnexpectedException: Unexpected exception[BeanCreationException: Error creating bean with name 'class org.flywaydb.play.PlayInitializer': Bean instantiation via constructor failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.flywaydb.play.PlayInitializer]: Constructor threw exception; nested exception is org.flywaydb.core.api.FlywayException: Found non-empty schema(s) "public" without metadata table! Use baseline() or set baselineOnMigrate to true to initialize the metadata table.]
        at play.core.server.DevServerStart$$anon$1.reload(DevServerStart.scala:186)
        at play.core.server.DevServerStart$$anon$1.get(DevServerStart.scala:124)
        at play.core.server.AkkaHttpServer.modelConversion(AkkaHttpServer.scala:183)
        at play.core.server.AkkaHttpServer.handleRequest(AkkaHttpServer.scala:189)
        at play.core.server.AkkaHttpServer.$anonfun$createServerBinding$3(AkkaHttpServer.scala:106)
        at akka.stream.impl.fusing.MapAsync$$anon$23.onPush(Ops.scala:1172)
        at akka.stream.impl.fusing.GraphInterpreter.processPush(GraphInterpreter.scala:499)
        at akka.stream.impl.fusing.GraphInterpreter.processEvent(GraphInterpreter.scala:462)
        at akka.stream.impl.fusing.GraphInterpreter.execute(GraphInterpreter.scala:368)
        at akka.stream.impl.fusing.GraphInterpreterShell.runBatch(ActorGraphInterpreter.scala:571)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'class org.flywaydb.play.PlayInitializer': Bean instantiation via constructor failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.flywaydb.play.PlayInitializer]: Constructor threw exception; nested exception is org.flywaydb.core.api.FlywayException: Found non-empty schema(s) "public" without metadata table! Use baseline() or set baselineOnMigrate to true to initialize the metadata table.
        at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:279)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1193)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1095)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:513)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:761)
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.flywaydb.play.PlayInitializer]: Constructor threw exception; nested exception is org.flywaydb.core.api.FlywayException: Found non-empty schema(s) "public" without metadata table! Use baseline() or set baselineOnMigrate to true to initialize the metadata table.
        at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:154)
        at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:122)
        at org.springframework.beans.factory.support.ConstructorResolver$1.run(ConstructorResolver.java:265)
        at java.security.AccessController.doPrivileged(Native Method)
        at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:262)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1193)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1095)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:513)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
Caused by: org.flywaydb.core.api.FlywayException: Found non-empty schema(s) "public" without metadata table! Use baseline() or set baselineOnMigrate to true to initialize the metadata table.
        at org.flywaydb.core.Flyway$1.execute(Flyway.java:995)
        at org.flywaydb.core.Flyway$1.execute(Flyway.java:971)
        at org.flywaydb.core.Flyway.execute(Flyway.java:1464)
        at org.flywaydb.core.Flyway.migrate(Flyway.java:971)
        at org.flywaydb.play.PlayInitializer.$anonfun$migrateAutomatically$1(PlayInitializer.scala:156)
        at org.flywaydb.play.PlayInitializer.$anonfun$migrateAutomatically$1$adapted(PlayInitializer.scala:155)
        at scala.Option.foreach(Option.scala:257)
        at org.flywaydb.play.PlayInitializer.migrateAutomatically(PlayInitializer.scala:155)
        at org.flywaydb.play.PlayInitializer.$anonfun$onStart$1(PlayInitializer.scala:147)
        at org.flywaydb.play.PlayInitializer.$anonfun$onStart$1$adapted(PlayInitializer.scala:145)

although I set db.default.migration.baselineOnMigrate=true - it seems not working

Anyone been able to connect to aws rds instance?

I set up a postgres instance on AWS and wanted to test connecting to that vs. my localhost which is running fine. It definitely connects, I see on the aws console there are connections to the database, but the app just hangs on: "[debug] - application - Directory for migration files found. db/migration/default" and never actually does the migrations. Has anyone encountered this and knows of what the issue is?

NoSuchMethodError after upgrading from flyway 4.0.3 to 4.1.2

I am using flyway-play 3.0.1 (with play framework 2.5.7) and getting the following exception on startup after upgrading flyway from 4.0.3 to 4.1.2. Getting same error on flyway 4.1.0.

play.api.UnexpectedException: Unexpected exception[CreationException: Unable to create injector, see the following errors:

1) Error injecting constructor, java.lang.NoSuchMethodError: org.flywaydb.core.internal.util.jdbc.DriverDataSource.<init>(Ljava/lang/ClassLoader;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)V
  at org.flywaydb.play.PlayInitializer.<init>(PlayInitializer.scala:31)
  at org.flywaydb.play.PlayModule.bindings(PlayModule.scala:24):
Binding(class org.flywaydb.play.PlayInitializer to self eagerly) (via modules: com.google.inject.util.Modules$OverrideModule -> play.api.inject.guice.GuiceableModuleConversions$$anon$1)
  while locating org.flywaydb.play.PlayInitializer

1 error]
	at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1$$anonfun$1.apply(DevServerStart.scala:180)
	at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1$$anonfun$1.apply(DevServerStart.scala:131)
	at scala.Option.map(Option.scala:146)
	at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1.apply(DevServerStart.scala:131)
	at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1.apply(DevServerStart.scala:129)
	at scala.util.Success.flatMap(Try.scala:231)
	at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1.apply(DevServerStart.scala:129)
	at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1.apply(DevServerStart.scala:121)
	at scala.concurrent.impl.Future$PromiseCompletingRunnable.liftedTree1$1(Future.scala:24)
	at scala.concurrent.impl.Future$PromiseCompletingRunnable.run(Future.scala:24)
	at java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(ForkJoinTask.java:1402)
	at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
	at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
	at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
	at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)
Caused by: com.google.inject.CreationException: Unable to create injector, see the following errors:

1) Error injecting constructor, java.lang.NoSuchMethodError: org.flywaydb.core.internal.util.jdbc.DriverDataSource.<init>(Ljava/lang/ClassLoader;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)V
  at org.flywaydb.play.PlayInitializer.<init>(PlayInitializer.scala:31)
  at org.flywaydb.play.PlayModule.bindings(PlayModule.scala:24):
Binding(class org.flywaydb.play.PlayInitializer to self eagerly) (via modules: com.google.inject.util.Modules$OverrideModule -> play.api.inject.guice.GuiceableModuleConversions$$anon$1)
  while locating org.flywaydb.play.PlayInitializer

1 error
	at com.google.inject.internal.Errors.throwCreationExceptionIfErrorsExist(Errors.java:466)
	at com.google.inject.internal.InternalInjectorCreator.injectDynamically(InternalInjectorCreator.java:184)
	at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:110)
	at com.google.inject.Guice.createInjector(Guice.java:96)
	at com.google.inject.Guice.createInjector(Guice.java:84)
	at play.api.inject.guice.GuiceBuilder.injector(GuiceInjectorBuilder.scala:181)
	at play.inject.guice.GuiceBuilder.injector(GuiceBuilder.java:208)
	at play.inject.guice.GuiceApplicationBuilder.build(GuiceApplicationBuilder.java:127)
	at play.inject.guice.GuiceApplicationLoader.load(GuiceApplicationLoader.java:34)
	at play.api.ApplicationLoader$JavaApplicationLoaderAdapter$1.load(ApplicationLoader.scala:70)
	at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1$$anonfun$1$$anonfun$2.apply(DevServerStart.scala:168)
	at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1$$anonfun$1$$anonfun$2.apply(DevServerStart.scala:164)
	at play.utils.Threads$.withContextClassLoader(Threads.scala:21)
	at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1$$anonfun$1.apply(DevServerStart.scala:164)
	... 14 common frames omitted
Caused by: java.lang.NoSuchMethodError: org.flywaydb.core.internal.util.jdbc.DriverDataSource.<init>(Ljava/lang/ClassLoader;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)V
	at org.flywaydb.play.PlayInitializer$$anonfun$flyways$4.apply(PlayInitializer.scala:65)
	at org.flywaydb.play.PlayInitializer$$anonfun$flyways$4.apply(PlayInitializer.scala:59)
	at scala.collection.TraversableLike$WithFilter$$anonfun$map$2.apply(TraversableLike.scala:683)
	at scala.collection.immutable.Map$Map2.foreach(Map.scala:137)
	at scala.collection.TraversableLike$WithFilter.map(TraversableLike.scala:682)
	at org.flywaydb.play.PlayInitializer.flyways$lzycompute(PlayInitializer.scala:59)
	at org.flywaydb.play.PlayInitializer.flyways(PlayInitializer.scala:57)
	at org.flywaydb.play.PlayInitializer.onStart(PlayInitializer.scala:128)
	at org.flywaydb.play.PlayInitializer.<init>(PlayInitializer.scala:150)
	at org.flywaydb.play.PlayInitializer$$FastClassByGuice$$fd53e8fe.newInstance(<generated>)
	at com.google.inject.internal.cglib.reflect.$FastConstructor.newInstance(FastConstructor.java:40)
	at com.google.inject.internal.DefaultConstructionProxyFactory$1.newInstance(DefaultConstructionProxyFactory.java:61)
	at com.google.inject.internal.ConstructorInjector.provision(ConstructorInjector.java:105)
	at com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:85)
	at com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:267)
	at com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46)
	at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1103)
	at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
	at com.google.inject.internal.SingletonScope$1.get(SingletonScope.java:145)
	at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:41)
	at com.google.inject.internal.InternalInjectorCreator$1.call(InternalInjectorCreator.java:205)
	at com.google.inject.internal.InternalInjectorCreator$1.call(InternalInjectorCreator.java:199)
	at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1092)
	at com.google.inject.internal.InternalInjectorCreator.loadEagerSingletons(InternalInjectorCreator.java:199)
	at com.google.inject.internal.InternalInjectorCreator.injectDynamically(InternalInjectorCreator.java:180)
	... 26 common frames omitted

How to do Flyway migrations eager in Play Framework

What I want to do is to run the migration eagerly before other Components need the database.

I tried to inject the FlywayPlayComponents into my Setup, like:

    @Singleton
    class AppSetup @Inject()(val environment: Environment,
                                val webCommands: WebCommands,
                                val configuration: Configuration,
                           )
      extends FlywayPlayComponents {
    
      flywayPlayInitializer
      ...

But AppSetup is still run first and the Flyway migration is run with the first request.

Is there a way to do this or do I miss something?

I also created a Stackoverflow question:

https://stackoverflow.com/questions/60303933/how-to-do-flyway-migrations-eager-in-play-framework

flyway.ignoreMissingMigrations does not seem to work on 4.0 or 5.2.

Added db.default.migration.ignoreMissingMigrations=true with no effect.
I checked PlayInitializer.scala and it seems to map only few of the many flyway properties.

Is there another way of setting this configuration?
I added flyway.conf to my resources folder with this config but did not help.

Travis CI

@axelfontaine
I want to set up Travis CI but have no permission to change repository settings.
Could you give me the permission?

FileNotFoundException when using locations with manual migration

Hello,

we are using flyway-play with the following configuration in "development mode" (e.g. sbt run):

db.default.migrations.locations=["prod", "stage"]
db.default.migrations.auto=false

Unfortunately flyway-play crashes with a FileNotFoundException in this scenario (stacktrace) when pending migrations exist. Note that the crash does not occur when

  • we run our unit tests against the database (e.g. Mode.Test),
  • when we enable db.default.migrations.auto=true,
  • when we do not use locations at all,
  • or when all migrations are successfully applied.

I think the root cause is that PlayInitializer.migrationDescriptionToShow does not take locations into account when trying to read the migration file for the message. Hence the error only occurs when the migrations are not applied automatically because checkState and thus migrationDescriptionToShow are never invoked in this case, or when there are no pending migrations because in this case checkState doesn't call migrationDescriptionToShow.

sql file named V1__??? does not properly get executed in prod mode

I'm kind of new to flyway so I might be misunderstanding something though,
when you use a sql file named V1,It's working perfectly in test/dev mode but flyway does not execute it in prod mode.

I guess It's great if flyway-play had an option to execute init of flyway or output warning if V1__???.sql is located in the target directory.

Am I missing something?

cleanDisabled support

Currently cleanDisabled param seems to be not supported (neither flyway.cleanDisabled nor db.cleanDisabled). Please add support of this option.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.