Spring Boot - 使用应用程序监听器

时间:2017-04-12 11:36:06

标签: java spring-boot

启动我的春季启动应用程序后,我想启动一个客户流程,例如创建所需的文件夹,文件等。为此,我使用ApplicationListener<ApplicationReadyEvent>。这与预期的一样。但我正在使用SpringApplicationBuilder构建我的spring应用程序上下文。每个孩子都会通知应用程序正确启动。所以我的客户后期处理开始甚至不止一次。

@SpringBootApplication
@EnableConfigurationProperties(value = {StorageProperties.class})
@EnableAsync
public class Application {

  public static void main(String[] args) {

    SpringApplicationBuilder parentBuilder
            = new SpringApplicationBuilder(Application.class);

    parentBuilder.child(Config1.class)
            .properties("server.port:1443")
            ...
            .run(args);
    parentBuilder.child(Config2.class)
            .properties("server.port:2443")
            ...
            .run(args);
  }
}

我的第一个想法是,我可以在Config1中为我的事件监听器创建一个带有 @Bean 的新Bean。但我无法覆盖配置文件StorageProperties.class,这是此类所必需的。

因为Listener具有基于构造函数的依赖注入:

private final Path mPathTo;
public AfterStart(StorageProperties prop) {
    this.mPathTo = Paths.get(prob.getPath());
}

我怎样才能每次启动一次启动监听器?

1 个答案:

答案 0 :(得分:1)

对于对这个问题感兴趣的每个人。这个解决方案对我有用:

public void onApplicationEvent(ApplicationReadyEvent e) {
    if (e.getApplicationContext().getParent == null) {
        System.out.println("******************************");
        System.out.println("Post-process begins.");
        System.out.println("******************************");      
    }
}