@PostConstruct方法在运行前运行

时间:2018-09-01 10:15:50

标签: spring flyway

我知道以前曾问过这种问题。 我有一个用@PostConstruct注释的方法。 该方法假定在调用之前 已执行了所有Flyway脚本。 似乎Flyway还使用了@PostConstruct注释方法,这些方法在我的方法之后称为之后。 我试图用@DependOn和其他flyway benames注释我的方法。 不幸的是没有成功。有人可以帮我吗?

1 个答案:

答案 0 :(得分:3)

解决方案:

我将在构造函数中设置对FlywayMigrationInitializer的依赖。创建并设置初始化程序后,将运行迁移。

或者您可以依赖flywayInitializer bean(@DependsOn("flywayInitializer"))。 Bean被命名为flywayInitializer类的FlywayMigrationInitializer,并且是在FlywayAutoConfiguration.java中创建的。

FlywayMigrationInitializer实现InitializingBean并在migrate方法中调用afterPropertiesSet方法。

示例:

@Component
// @DependsOn("flywayInitializer")
@Slf4j
public class TestPostConstruct {

    public TestPostConstruct(FlywayMigrationInitializer flywayForceInitialization) {
    }

    @PostConstruct
    public void testPostConstruct() {
      log.info("---->  in testPostConstruct");
    }
}

Spring Boot日志:

INFO 4760 --- [main] o.f.core.internal.command.DbMigrate      : Successfully applied 1 migration to schema "PUBLIC" (execution time 00:00.130s)
INFO 4760 --- [main] c.example.flywayinit.TestPostConstruct   : ---->  in testPostConstruct