如何在休眠验证之前开始飞行路线迁移?

How can I start flyway migration before hibernate validation?

我使用 flyway + hibernate 验证。我有飞行豆:

@Component
public class DbMigration {

    private static final Logger LOG = LoggerFactory.getLogger(DbMigration.class);

    private final Config config;

    @Autowired
    public DbMigration(Config config) {
        this.config = config;
    }

    public void runMigration() {
        try {
            Flyway flyway = new Flyway();
            flyway.configure(properties());
            int migrationApplied = flyway.migrate();
            LOG.info("[" + migrationApplied + "] migrations are applied");
        } catch (FlywayException ex) {
            throw new DatabaseException("Exception during database migrations: ", ex);
        }
    }

    public Properties properties() {
        //my prop
    }
}

在应用程序中 class 我这样做了:

public static void main(String[] args) {
        try {
            AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ApplicationConfiguration.class);
            context.getBean(DbMigration.class).runMigration();

但是我的休眠在 runMigration(); 之前启动并验证抛出异常。接下来我该如何开始?

  1. 运行 迁移
  2. 开始休眠验证

编辑:

  @Bean
    @Autowired
    public LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource datasource) {
        log.info("entityManagerFactory start");
        dbMigration.runMigration();

不过我觉得不好

在您的 spring 应用程序配置中,如果您有一个实体管理器工厂 bean 配置,您可以使它依赖于 flyway bean,以便它在它之后被初始化。类似于:

@Bean
@DependsOn("flyway")
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
    // Initialize EntityManagerFactory here
}

flyway bean 配置可以是这样的:

@Bean(initMethod = "migrate")
public Flyway flyway() {
    Flyway flyway = new Flyway();
    // configure bean here
    return flyway;
}