如何在休眠验证之前启动flyway迁移?

时间:2017-07-04 06:52:30

标签: java spring hibernate flyway

我使用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
    }
}

在Apllication类中,我这样做:

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

但我的hibernate在runMigration();之前启动并验证throw exeption。我怎么才能开始呢?

  1. 运行迁移
  2. 启动hibernate验证
  3. 编辑:

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

    但我认为这很糟糕

1 个答案:

答案 0 :(得分:2)

在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;
}
相关问题