#spring #spring-boot
#весна #spring-boot
Вопрос:
В определенных случаях, например, при включении привязки к Spring app @EnableBinding
, ContextRefreshedEvent
запускается несколько раз.
Например,
public interface MessageBinding {
@Input("test")
KStream<Long, String> messagesIn();
}
@EnableBinding(MessageBinding.class)
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
@Component
public static class ComponentX {
@Autowired
ApplicationContext applicationContext;
@EventListener
public void onApplicationEvent(ContextRefreshedEvent event) {
System.out.println("Fired event");
}
}
Если вы удалите @EnableBinding
аннотацию, ContextRefreshedEvent
она будет запущена только один раз.
Если вы добавите его, событие будет запущено 5 раз.
Ответ №1:
Вам нужно будет проверить ваш конкретный ApplicationContext следующим образом:
@Autowired
ApplicationContext applicationContext;
@EventListener
public void onApplicationEvent(ContextRefreshedEvent event) {
if (event.getApplicationContext().equals(this.applicationContext)) {
System.out.println("Fired only once!");
}
}