Database Migrations
PRODUCTION applications mein, ddl-auto=update RISKY hai — Hibernate KHUD DECIDE karta hai SCHEMA KAISे CHANGE karna hai, jo UNPREDICTABLE ho sakta hai. Migration TOOLS (Flyway, Liquibase) BEHTAR APPROACH hain — HAR SCHEMA CHANGE, EK EXPLICIT, VERSIONED FILE mein LIKHA jaata hai, jo TEAM ke SAATH SHARE, REVIEW, aur ROLLBACK kiya ja sakta hai.
Flyway (SIMPLER, SQL-based) SPRING BOOT mein AUTO-CONFIGURED hai — flyway-core DEPENDENCY ADD karo, db/migration FOLDER mein SQL FILES RAKHO (V1__init.sql pattern), aur APPLICATION STARTUP par, PENDING migrations AUTOMATICALLY APPLY ho jaati hain.
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
</dependency>
// src/main/resources/db/migration/V1__create_users_table.sql:
// CREATE TABLE users (
// id BIGSERIAL PRIMARY KEY,
// name VARCHAR(255) NOT NULL,
// email VARCHAR(255) UNIQUE NOT NULL
// );
// src/main/resources/db/migration/V2__add_phone_column.sql:
// ALTER TABLE users ADD COLUMN phone VARCHAR(20);
// application.properties:
spring.jpa.hibernate.ddl-auto=validate // Flyway SCHEMA MANAGE karta hai, Hibernate sirf VALIDATE- Migration tools = versioned, TRACKED, TEAM-shareable schema changes
- Flyway = SQL files, naming convention se ORDER (V1__, V2__)
- Application STARTUP par, PENDING migrations AUTOMATICALLY apply hoti hain
Flyway SIMPLER hai — SQL FILES (V1__init.sql, V2__add_column.sql) LIKHTE ho, NAMING CONVENTION se ORDER decide hota hai. Liquibase MORE FLEXIBLE hai — XML/YAML/JSON format SUPPORT karta hai, aur DATABASE-AGNOSTIC CHANGESETS likhна POSSIBLE hai (SAME changeset, MULTIPLE database TYPES par APPLY ho sakta hai).
- Flyway = SIMPLE, SQL-based, naming convention se ordering
- Liquibase = FLEXIBLE, XML/YAML/JSON, database-agnostic changesets
- DONO Spring Boot mein AUTO-CONFIGURED (starter add karne se)
Flyway files EK STRICT naming pattern FOLLOW karte hain — V{version}__{description}.sql (jaise V1__create_users_table.sql). VERSION NUMBER se, EXECUTION ORDER decide hota hai, aur Flyway TRACK karta hai KAUN SI migrations ALREADY APPLY ho chuki hain (flyway_schema_history table mein).
db/migration/V1__create_users_table.sql
db/migration/V2__add_email_column.sql
db/migration/V3__create_orders_table.sql
// Application STARTUP par, Flyway AUTOMATICALLY PENDING migrations APPLY kar deta hai