启动我的春季启动应用程序后,我想启动一个客户流程,例如创建所需的文件夹,文件等。为此,我使用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());
}
我怎样才能每次启动一次启动监听器?
答案 0 :(得分:1)
对于对这个问题感兴趣的每个人。这个解决方案对我有用:
public void onApplicationEvent(ApplicationReadyEvent e) {
if (e.getApplicationContext().getParent == null) {
System.out.println("******************************");
System.out.println("Post-process begins.");
System.out.println("******************************");
}
}