title: Use H2 Database for Spring Test Profile with Flyway
body: <p>I'm attempting to setup my end-to-end tests to use an in memory database that can easily be brought up, shutdown, erased and seeded with test data. I am working on a spring project and am using flyway to migrate the database. When starting my spring server without any profiles, flyway correctly runs the migrations and all is good.  However, when running in my "test" profile, the flyway migrations do not run.  </p>
  
  <p><strong>application.properties</strong></p>
  
  <pre><code># Database Properties
  spring.jpa.database=POSTGRESQL
  spring.jpa.show-sql=true
  spring.jpa.hibernate.ddl-auto=validate
  spring.database.driverClassName=org.postgresql.Driver
  spring.datasource.url=jdbc:postgresql://localhost:5432/mydb
  
  # Data Rest Properties
  spring.data.rest.basePath=/api
  
  # Logging Properties
  logging.level.root=WARN
  logging.level.org.flywaydb=INFO
  logging.level.com.myproj=INFO
  </code></pre>
  
  <p><strong>application-test.properties</strong></p>
  
  <pre><code># Server Properties
  server.port=8081
  
  # Database Properties
  spring.jpa.database=H2
  spring.database.driverClassName=org.h2.Driver
  spring.datasource.url=jdbc:h2:mem:mydb-test
  
  # Dev Tools Properties
  spring.devtools.restart.enabled=false
  
  # Flyway Properties
  flyway.locations=classpath:db/migration,classpath:db/test_seed_data
  </code></pre>
  
  <p>This is the output I get when starting the spring server with the test profile:</p>
  
  <pre><code> .   ____          _            __ _ _
   /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
  ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
   \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
    '  |____| .__|_| |_|_| |_\__, | / / / /
   =========|_|==============|___/=/_/_/_/
   :: Spring Boot ::             (v1.4.0.M2)
  
  2016-05-11 23:01:16.052  INFO 86897 --- [  restartedMain] com.myproj.myprojApplicationKt           : Starting myprojApplicationKt on me.local with PID 86897 (/Users/me/Workspace/myproj/target/classes started by me in /Users/me/Workspace/myproj)
  2016-05-11 23:01:16.054  INFO 86897 --- [  restartedMain] com.me.myprojApplicationKt               : The following profiles are active: test
  2016-05-11 23:01:20.312 ERROR 86897 --- [ost-startStop-1] o.s.b.c.embedded.tomcat.TomcatStarter    : Error starting Tomcat context: org.springframework.beans.factory.UnsatisfiedDependencyException
  2016-05-11 23:01:20.379  WARN 86897 --- [  restartedMain] ationConfigEmbeddedWebApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.context.ApplicationContextException: Unable to start embedded container; nested exception is org.springframework.boot.context.embedded.EmbeddedServletContainerException: Unable to start embedded Tomcat
  2016-05-11 23:01:20.404 ERROR 86897 --- [  restartedMain] o.s.boot.SpringApplication               : Application startup failed
  </code></pre>
  
  <p>And the ultimate error is the validation failing (still fails to create the table when I turn off validation):</p>
  
  <pre><code>Caused by: org.hibernate.tool.schema.spi.SchemaManagementException: Schema-validation: missing table [table-name]
  </code></pre>
  
  <p>Any idea why the migrations do not run for the "test" profile?</p>
  
  <hr>
  
  <p><strong>EDIT</strong></p>
  
  <p>Just realized that my migrations are written in PostgresQL and I'm expecting them to work with H2... I think that is obviously one issue.  So expand this question to how to have the same migrations run on two different database types (if it's even possible)...</p>
  
  <p>But why don't I get an error stating that Flyway tried to run the migration and that the database didn't accept the queries?</p>