项目中使用了flyway,遇到flyway还未合并完数据库,业务代码就执行了,导致报错。要实现这个目标,有两种方法:

  1. 使用DependsOn对相关Bean添加依赖,让数据库相关DAO Bean依赖flyway的Bean。这样DAO Bean初始化和使用就会在flyway Bean初始化之后了。
1
2
3
4
@DependsOn({"flyway", "flywayInitializer"})
@Component
public class UserDao {
}
  1. 继承FlywayMigrationStrategy。这种方式可以在migrate执行前后注入特定的操作。从执行日志也可以看到,真的起效果了,达到了我们的目标要求。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
@Component
@Slf4j
public class CallbackFlywayMigrationStrategy implements FlywayMigrationStrategy {


    @Override
    public void migrate(Flyway flyway) {
        log.info("before flyway migration...");
        flyway.migrate();
        log.info("after flyway migration...");
    }

}