项目从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/