springBoot 项目集成Mybatis,原有flyway不执行,项目启动报错;Flyway和MybatisPlus执行顺序

"项目从JPA迁移到Mybatis后,由于初始化时尝试访问未由Flyway创建的数据库表导致启动失败。错误信息显示找不到特定的表。问题根源在于Flyway迁移未完成。解决方案是在相关类上添加@DependsOn("flywayConfig")注解,确保Flyway在加载该类之前完成初始化,从而避免启动异常。FlywayConfig.java中展示了配置和迁移的方法。"
摘要由CSDN通过智能技术生成

背景:

项目从jpa过渡到mybatis,代码整合之后,使用新的数据库连接,项目启动报错,未看到flyway等打印的日志信息,且数据库未生成数据。

报错大概为找不到对应表

org.springframework.context.ApplicationContextException: Unable to start web server; nested exception is org.springframework.boot.web.server.WebServerException: Unable to start embedded Tomcat

### Cause: org.postgresql.util.PSQLException: ERROR: relation "postgres_schemename.xxxxx_configuration_tablename" does not exist

究其原因,应该是flyway还未启动成功,初始化代码时,用到了对应的表或对应表数据,但此时flyway还未执行,所以抛出异常,项目启动报错。

解决方案:

查看日志是哪个类抛出的错误信息,在该类上加@DependsOn("flywayConfig")注解,
该注解含义是在flywayConfig类执行完后再加载该类,这样flyway执行完,有表有数据,就能正常加载到,启动也正常。

下附FlywayConfig.java代码

@Configuration
public class FlywayConfig {

    private final DataSource dataSource;

    public FlywayConfig(DataSource dataSource) {
        this.dataSource = dataSource;
    }

    @PostConstruct
    public void migrate() {
        Flyway flyway = Flyway.configure()
            .dataSource(dataSource)
            .locations("db/migration")
            .baselineOnMigrate(true)
            .load();
        flyway.migrate();
    }
}

写的较为简单,其实就是Flyway和MybatisPlus执行顺序先后的问题。
针对该问题也可参考:https://tomoya92.github.io/2019/01/03/spring-boot-flyway-mybatis-plus/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值