Java 如何在hibernate验证之前启动flyway迁移?
我使用flyway+hibernate验证。我有flyway bean:Java 如何在hibernate验证之前启动flyway迁移?,java,spring,hibernate,flyway,Java,Spring,Hibernate,Flyway,我使用flyway+hibernate验证。我有flyway bean: @Component public class DbMigration { private static final Logger LOG = LoggerFactory.getLogger(DbMigration.class); private final Config config; @Autowired public DbMigration(Config config) {
@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
}
}
在应用类中,我会这样做:
public static void main(String[] args) {
try {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ApplicationConfiguration.class);
context.getBean(DbMigration.class).runMigration();
但是我的hibernate在runMigration()之前启动代码>并验证抛出验证。我下一步怎么开始
运行迁移
启动休眠验证
编辑:
但是我认为在spring应用程序配置中它是不好的,如果您有实体管理器工厂bean配置,您可以使它依赖于Flywaybean,以便在它之后初始化它。比如:
@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;
}
是的,我有LocalContainerEntityManagerFactoryBean,在那里我得到了“flyway”?“flyway”是你的flyway bean的名字。您可以像配置LocalContainerEntityManagerFactoryBean一样配置它。我将在我的答案中添加一个示例。如果您只在Flyway
实例上使用,这是一个很好的解决方案。在我的项目中,每个模块都有自己的Flyway
实例来管理自己的表,现在也有同样的问题。在这种情况下,如何解决初始化问题?您是否使用spring boot
?如果是这样,则不需要为flyway移植定义组件。如果您想覆盖默认选项并使其在hibernate之前运行,请添加一个bean配置,就像我在回答中解释的那样。您不需要告诉spring boot运行迁移,它会自动完成迁移。
@Bean(initMethod = "migrate")
public Flyway flyway() {
Flyway flyway = new Flyway();
// configure bean here
return flyway;
}