Блог первоначально опубликован в моем блоге js blogs.github.io
- Вступление
- Используемые технологии
- События приложения
- Бегун приложения
Вступление
Сталкивались ли вы когда-нибудь с ситуацией, когда вам приходится выполнять некоторые задачи сразу после запуска приложения Spring/Spring Boot? т.е. Инициализировать некоторые данные в базу данных, инициализировать константы уровня приложения, выполнить вызов API и т.д.
Есть несколько способов добиться этого. Здесь я собираюсь обсудить:
- События приложения
- Бегун приложения
Используемые технологии
- Java 11
- Пружинный ботинок 2.2.4
- Gradle 6.0.1
События приложения
Spring framework запускает различные события. Для нашего варианта использования нас больше заинтересует ContextStartedEvent
и ContextRefreshedEvent
. ContextStartedEvent событие, запускаемое во время запуска контекста. ContextRefreshedEvent событие, запускаемое во время запуска или обновления контекста.
@Component public class EventHandler { @EventListener(ContextStartedEvent.class) public void handleContextStartEvent(ContextStartedEvent e) { // Write your code here } @EventListener(ContextRefreshedEvent.class) public void handleContextRefreshEvent(ContextRefreshedEvent e) { // Write your code here } // Or you can handle both the events in 1 method @EventListener({ContextStartedEvent.class, ContextRefreshedEvent.class}) public void handleBoth(ApplicationContextEvent e) { if (e instanceof ContextStartedEvent) { } else { } } }
Бегун приложения
Spring Boot предоставляет интерфейс с именем ApplicationRunner
, любой компонент, реализующий этот интерфейс, должен выполняться, когда он содержится в SpringApplication
.
@Component public class DBInitializer implements ApplicationRunner { private final UserRepository userRepository; private DBInitializer(UserRepository userRepository) { this.userRepository = userRepository; } @Override public void run(ApplicationArguments args) throws Exception { // Initialize user here } }
или вышеизложенное может быть использован
@Configuration public class Config { @Bean public ApplicationRunner initializeUser(UserRepository userRepository) { return args -> { // Initialize user here }; } }
Application Runner предоставляет Аргументы приложения
в методе run, который используется для получения аргументов командной строки путем вызова getSourceArgs()
. Вы также можете получить проанализированные аргументы, используя этот класс. т.е.
Допустим, вы передали аргументы командной строки, такие как --source/usr/local --print-only --target/tmp/local
Таким образом, вызов метода для
getOptionNames()
вАргументы приложения
вернет набор аргументов – [‘source’, ‘только для печати’, ‘target’]содержит параметр(имя строки)
проверяет если аргумент содержитgetoptionvalue(имя)
возвращает список значений параметра.getOptionValues('source')
вернет список – [‘/usr/local’]
Оригинал: “https://dev.to/jeetmp3/how-to-execute-code-on-spring-application-start-up-59ab”