<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Flyway on Devops Monk</title><link>https://blog.devops-monk.com/tags/flyway/</link><description>Recent content in Flyway on Devops Monk</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Sat, 23 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://blog.devops-monk.com/tags/flyway/index.xml" rel="self" type="application/rss+xml"/><item><title>Database Migration Testing — Flyway and Liquibase with Testcontainers</title><link>https://blog.devops-monk.com/tutorials/testcontainers/flyway-liquibase-testing/</link><pubDate>Sat, 23 May 2026 00:00:00 +0000</pubDate><guid>https://blog.devops-monk.com/tutorials/testcontainers/flyway-liquibase-testing/</guid><description>Database migrations are the most dangerous code in most applications. A failed migration in production means downtime. A migration that succeeds but corrupts data is worse. Testing migrations against the actual target database — not H2, not a manual inspection — is the only way to catch migration bugs before they reach production.
This article covers testing Flyway and Liquibase migrations with Testcontainers, verifying schema correctness after migration, and testing rollback scenarios.</description></item><item><title>Database Migrations with Flyway</title><link>https://blog.devops-monk.com/tutorials/spring-boot/spring-boot-flyway-migrations/</link><pubDate>Sun, 03 May 2026 00:00:00 +0000</pubDate><guid>https://blog.devops-monk.com/tutorials/spring-boot/spring-boot-flyway-migrations/</guid><description>Never use spring.jpa.hibernate.ddl-auto=update in production. It&amp;rsquo;s unpredictable, irreversible, and can corrupt data. Flyway gives you version-controlled, audited, reproducible schema changes.
Why Flyway? Every database change runs as a versioned SQL script. Flyway tracks which scripts have run in a flyway_schema_history table. When the app starts:
Flyway reads all migration files Checks which have already run (by checking the history table) Runs any new ones, in order If the current state doesn&amp;rsquo;t match the expected state → fails fast Benefits:</description></item></channel></rss>