Spring Boot Application is not running Flyway migrations on startup

11,770

Solution 1

Add logging.level.root=debug your application.properties file to see detailed information during start application.

Also just add flyway user and password to application.properties.

spring.flyway.url = 'jdbc:postgresql://localhost:5555/mfidb'
spring.flyway.password=postgres
spring.flyway.user=postgres

if you dont need to run flyway from gradle, you can remove flyway config from build.gradle

Solution 2

My dependencies weren't getting refreshed when i did a gradle clean build so the flyway source was never there. I had to manually refresh my dependencies in my IDE and it started working. Sad when you spend hours on something so simple. Giga's comment to change the logging level helped me to find the issue. Thanks

Solution 3

In my case this is what happened:

I spent almost 4 hours to figure this out, My assumption was Spring JPA starter bring the flyway core dependency along with it. I didn't add the dependency for flyway-core explicitly. So if we dont do it spring boot flyway auto configuration will not give any error but just simply ignore the migration setup.

By tracing the auto configuration I figured out this, auto configuration ignoring the flyway setup if dependency not added manually rather than throwing exception using conditional annotation like this @ConditionalOnMissingBean({Flyway.class})

Solution 4

Your application.properties looks perfect to me.

I am using Flyway as well, it works like a charm and executes migrations on startup of my application. The only entry in my build.gradle related to flyway is the dependency

runtime("org.flywaydb:flyway-core")

I think you should remove all other flyway related entries from build.gradle.

Solution 5

Check if your script already run.

The trick is, once Flyway has succeeded in running the update script, it has created the table flyway_schema_history, that recorded that I have already run the create script successfully once.

When I tried to run the script second time, that was rejected but since the originally created table (in my case called 'bike') was deleted when the app shut down when run in spring.jpa.hibernate.ddl-auto=create-drop mode previous time, I was getting the

SchemaManagementException: Schema-validation: missing table [bike] Exception.

drop the flyway_schema_history table or delete a record corresponding to previous script run and roll again!

Share:
11,770
Will Harrison
Author by

Will Harrison

Updated on June 05, 2022

Comments

  • Will Harrison
    Will Harrison almost 2 years

    I have a Spring Boot Application with a couple Entity classes and I'm trying to implement database migrations with flyway. It appears that, on startup, Spring Boot is not running flyway at all.

    Here is my application.properties

    spring.datasource.url= jdbc:postgresql://localhost:5555/mfidb
    spring.datasource.username=postgres
    spring.datasource.password=postgres
    spring.jpa.hibernate.ddl-auto=validate
    
    spring.flyway.enabled=true
    

    Here are the lines in my build.gradle that have something to do with flyway

    plugins {
        id 'org.springframework.boot' version '2.2.6.RELEASE'
        id 'io.spring.dependency-management' version '1.0.9.RELEASE'
        id 'java'
        id "org.flywaydb.flyway" version "6.4.1"
    }
    
    dependencies {
        implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
        implementation 'org.springframework.boot:spring-boot-starter-web'    
        implementation 'org.flywaydb:flyway-core'
        runtime('org.postgresql:postgresql:42.2.12')
    }
    
    flyway {
        url = 'jdbc:postgresql://localhost:5555/mfidb'
        user = 'postgres'
        password = 'postgres'
    }
    

    I am able to run my migrations by entering gradle flywayMigrate -i in the terminal.

    But I want the migrations to run on startup.

    Any help would be greatly appreciated, thanks in advance.

    EDIT:

    Here is the console output when running the application

    2020-05-05 11:55:59.022  INFO 50754 --- [           main] com.ubm.mfi.MfiApplication               : Starting MfiApplication on MacBook-Pro.local with PID 50754 (~/Downloads/mfi 5/build/classes/java/main started by will in ~/Downloads/mfi 5)
    2020-05-05 11:55:59.024  INFO 50754 --- [           main] com.ubm.mfi.MfiApplication               : No active profile set, falling back to default profiles: default
    2020-05-05 11:55:59.457  INFO 50754 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
    2020-05-05 11:55:59.495  INFO 50754 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 33ms. Found 2 JPA repository interfaces.
    2020-05-05 11:55:59.778  INFO 50754 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
    2020-05-05 11:55:59.783  INFO 50754 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
    2020-05-05 11:55:59.784  INFO 50754 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.33]
    2020-05-05 11:55:59.838  INFO 50754 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
    2020-05-05 11:55:59.838  INFO 50754 --- [           main] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 768 ms
    2020-05-05 11:55:59.917  INFO 50754 --- [           main] o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing PersistenceUnitInfo [name: default]
    2020-05-05 11:55:59.944  INFO 50754 --- [           main] org.hibernate.Version                    : HHH000412: Hibernate ORM core version 5.4.12.Final
    2020-05-05 11:55:59.991  INFO 50754 --- [           main] o.hibernate.annotations.common.Version   : HCANN000001: Hibernate Commons Annotations {5.1.0.Final}
    2020-05-05 11:56:00.051  INFO 50754 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
    2020-05-05 11:56:00.114  INFO 50754 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
    2020-05-05 11:56:00.124  INFO 50754 --- [           main] org.hibernate.dialect.Dialect            : HHH000400: Using dialect: org.hibernate.dialect.PostgreSQL10Dialect
    2020-05-05 11:56:00.545  INFO 50754 --- [           main] o.h.e.t.j.p.i.JtaPlatformInitiator       : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
    2020-05-05 11:56:00.548  INFO 50754 --- [           main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
    2020-05-05 11:56:00.818  WARN 50754 --- [           main] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning
    2020-05-05 11:56:00.891  INFO 50754 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
    2020-05-05 11:56:01.005  INFO 50754 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
    2020-05-05 11:56:01.007  INFO 50754 --- [           main] com.ubm.mfi.MfiApplication               : Started MfiApplication in 2.255 seconds (JVM running for 2.983)
    

    Here is the path to the data migrations

    enter image description here