You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring项目如何配置Flyway实现PostgreSQL、MySQL多数据源独立迁移

Flyway多数据源独立迁移配置方案

第一步:禁用Flyway默认自动配置

默认Spring Boot的Flyway自动配置仅支持单数据源,需要先排除自动配置类,在启动类上添加如下注解:

@SpringBootApplication
@EnableAutoConfiguration(exclude = FlywayAutoConfiguration.class)
public class YourApplication {
    public static void main(String[] args) {
        SpringApplication.run(YourApplication.class, args);
    }
}

提示:如果使用Flyway 9.x及以上版本,需要单独引入对应数据库的Flyway扩展依赖,例如MySQL需要引入flyway-mysql依赖,避免出现不支持数据库的报错。

第二步:为两个数据源分别配置Flyway实例

2.1 调整LocalDBConfig配置

删除原有@FlywayDataSource注解,在类中新增对应PostgreSQL库的Flyway Bean,指定迁移脚本路径为db/migrate/manager,设置初始化时自动执行迁移:

@Configuration
@PropertySource( { "classpath:application.properties" } )
@EnableJpaRepositories(
        basePackages = "net.komus.oksitreport.repo.local",
        entityManagerFactoryRef = "localEntityManager",
        transactionManagerRef = "localTransactionManager"
)
public class LocalDBConfig {
    
    @Primary
    @Bean
    @ConfigurationProperties( prefix = "spring.datasource" )
    public DataSource customerDataSource() {
        return DataSourceBuilder.create().build();
    }
    
    // 本地库对应的Flyway配置
    @Primary
    @Bean(initMethod = "migrate")
    public Flyway localFlyway() {
        return Flyway.configure()
                .dataSource(customerDataSource())
                .locations("classpath:db/migrate/manager")
                // 可选配置,可根据实际需求调整
                .baselineOnMigrate(true)
                .cleanDisabled(true)
                .schemas("public") // PostgreSQL默认schema,按需修改
                .build();
    }

    @Bean(name = "localEntityManager")
    @Primary
    public LocalContainerEntityManagerFactoryBean localEntityManager() {
        // 原有逻辑保持不变
        ...
    }
    
    @Bean
    @Primary
    public PlatformTransactionManager localTransactionManager() {
        // 原有逻辑保持不变
        ...
    }
}

2.2 调整JiraDBConfig配置

同样删除@FlywayDataSource注解,新增对应MySQL库的Flyway Bean,指定迁移脚本路径为db/migrate/jira:

@Configuration
@PropertySource( { "classpath:application.properties" } )
@EnableJpaRepositories(
        basePackages = "net.komus.oksitreport.repo.jira",
        entityManagerFactoryRef = "jiraEntityManager",
        transactionManagerRef = "jiraTransactionManager"
)
public class JiraDBConfig {
    
    @Bean
    @ConfigurationProperties( prefix = "db.jira.datasource" )
    public DataSource jiraDataSource() {
        return DataSourceBuilder.create().build();
    }

    // Jira库对应的Flyway配置
    @Bean(initMethod = "migrate")
    public Flyway jiraFlyway() {
        return Flyway.configure()
                .dataSource(jiraDataSource())
                .locations("classpath:db/migrate/jira")
                // 可选配置,可根据实际需求调整
                .baselineOnMigrate(true)
                .cleanDisabled(true)
                .build();
    }
    
    @Bean(name = "jiraEntityManager")
    public LocalContainerEntityManagerFactoryBean jiraEntityManager() {
        // 原有逻辑保持不变
        ...
    }
    
    @Bean
    public PlatformTransactionManager jiraTransactionManager() {
        // 原有逻辑保持不变
        ...
    }
}

可选:参数外置到配置文件

如果不想把参数硬编码在配置类中,可以在application.properties中添加对应配置,通过@ConfigurationProperties绑定到Flyway实例即可:

# 本地PostgreSQL库Flyway配置
spring.flyway.local.locations=classpath:db/migrate/manager
spring.flyway.local.baseline-on-migrate=true
spring.flyway.local.clean-disabled=true

# Jira MySQL库Flyway配置
db.jira.flyway.locations=classpath:db/migrate/jira
db.jira.flyway.baseline-on-migrate=true
db.jira.flyway.clean-disabled=true

验证方式

启动应用后,分别检查两个数据库中的flyway_schema_history表,会生成对应迁移脚本的执行记录,两个数据源的迁移完全独立互不影响。

内容的提问来源于stack exchange,提问作者Nikolay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 13:36:01