Я создаю приложение с использованием Java Spring, в котором я хотел бы запустить некоторый код настройки среды, прежде чем мое приложение начнет обрабатывать запросы. В этом конкретном примере я использую PayPal Rest SDK и хочу настроить некоторые веб-перехватчики уведомлений для своего приложения. По очевидным причинам я не хочу, чтобы конечная точка вызывалась для настройки веб-перехватчиков после запуска приложения, поэтому размещение ее в моем контроллере, вероятно, не очень хорошая идея, и мне нужна некоторая информация о конфигурации Spring, чтобы настроить ее, поэтому Я не могу поместить это в main (). Я не против (на самом деле, я бы даже предпочел), что приложение вылетает, если не удается создать веб-перехватчики, если это ограничение, которое необходимо учитывать.
Как лучше это сделать?
Спасибо.
"запуск" не было ключевым словом, которое я думал использовать в моем поиске XD




and I need some Spring configuration information to set it up so I can't put it in main()
Вышеприведенное утверждение не соответствует действительности. Вы можете получить доступ к конфигурации Spring в файле main. Рассмотрим следующий пример.
@SpringBootApplication
public class Main {
@Autowire
private MyService service;
public static void main(String[] args) {
ConfigurableApplicationContext ctx = SpringApplication.run(InterviewHqApplication.class, args);
ctx.getBean(Main.class).setup();
}
private void setup() {
service.doStuff();
}
}
В этом примере метод setup() вызывается после загрузки контекста приложения.
На самом деле есть несколько способов сделать то, что вы пытаетесь сделать. Spring boot также поддерживает использование ApplicationRunner и CommandLineRunner, которые вызывают метод запуска после загрузки контекста приложения в качестве альтернативы тому, что я показал выше. Вы также можете прослушивать ApplicationReadyEvent, и вы можете вызвать @PostConstruct, чтобы выполнить некоторую определенную конфигурацию для bean-компонента после его инициализации.
О, круто. Это лучший способ делать то, что я хочу делать?
Я бы не рекомендовал это, это будет работать, но делает тестирование намного сложнее, чем необходимо. baeldung.com/running-setup-logic-on-startup-in-spring ApplicationListeners может подключаться к различным этапам жизненного цикла контекста приложения Spring Spring Boot предоставляет больше, например, ApplicationStartedEvent
Это совершенно правильный способ выполнить код после запуска. Надеюсь, это поможет вам начать работу, но вам придется провести немного больше исследований, чтобы решить, что лучше всего подходит для вашего конкретного варианта использования.
Когда я поискал в Интернете «запуск весенней загрузки», среди автоматических предложений был «крючок запуска весенней загрузки». Я бы, наверное, начал с этого и посмотрел, что вам подходит. Есть прослушиватели контекста приложения, инициализирующие bean-компоненты, по крайней мере, пара бегунов и так далее - я предполагаю, что вы не очень усердно искали, потому что это также обсуждается, по крайней мере, в некоторой степени в документации Spring Boot.