Java 如何将自检集成到Spring集成中?

Java 如何将自检集成到Spring集成中?,java,spring,spring-integration,Java,Spring,Spring Integration,我想在spring集成启动后启动一个自检。我的第一个方法是在设置集成流之后启动它: @Configuration @EnableIntegration @EnableIntegrationManagement @IntegrationComponentScan public class FlowConfig { ... @PostConstruct public void startSelfTest() { SelfTest selfTest = new Self

我想在spring集成启动后启动一个自检。我的第一个方法是在设置集成流之后启动它:

@Configuration
@EnableIntegration
@EnableIntegrationManagement
@IntegrationComponentScan
public class FlowConfig {
...
    @PostConstruct
    public void startSelfTest() {
        SelfTest selfTest = new SelfTest(rezeptConfig, dataSource, archiveClient);
        selfTest.run();
    }
...
}

这不起作用,因为测试启动时,数据库中的表丢失,因为liquibase尚未启动。我猜liquibase脚本将在初始化之后启动


你知道什么是开始自我测试的最佳地点吗?

只是猜测一下,ApplicationListener中ApplicationEvent事件的
呢?当Spring初始化并准备就绪时调用


例如,检查这个

负责创建和更新DB表的Liquibase bean在我的自检之后启动。一种解决方案是将@DependsOn与@Bean注释一起使用:

    @Bean
    @DependsOn("liquibase")
    public SelfTest startSelfTest() {
        SelfTest selfTest = new SelfTest(rezeptConfig, dataSource, archiveClient);
        selfTest.run();
        return selfTest;
    }

现在,自测是在Liquibase之后开始的。

好吧,进行低级资源交互的最佳实践是当应用程序上下文中的所有内容都已初始化时。这是bean根据其
SmartLifecycle
实现启动的阶段

因此,我建议修改您的解决方案,从一些
SmartLifecycle.start()
开始

这正是我们在Spring集成中所做的。 (请确保我们谈论的是完全相同的Spring集成:)


请参阅文档中的更多信息:

我不确定是否在初始化上下文后启动liquibase bean,但您是对的,这将是启动自检的正确位置。