Spring Boot - правильный способ запуска кода во время / до запуска приложения? - PullRequest
2 голосов
/ 30 марта 2019

Кажется, что существуют разные мнения относительно реализации логики в веб-приложении Spring Boot при запуске.Но нет единого мнения по поводу «наилучшей практики» или предпочтительного пути перед другими и т. Д.

У меня есть следующий код, который реализует интерфейс ApplicationRunner при запуске (с некоторыми фиктивными выводами):

import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;

@Component
@Slf4j
public class AppStartupRunner implements ApplicationRunner {

    public static int counter;

    @Override
    public void run(ApplicationArguments args) throws Exception {
        log.info("Application started with option names : {}",
                args.getOptionNames());
        log.info("Increment counter");
        counter++;
    }
}

Считается ли этот метод «правильным» (из-за отсутствия лучшего термина)?Мое намерение состоит в том, чтобы запустить некоторый код для извлечения значений при запуске из базы данных, сохранить их с использованием Ehcache и нескольких других «инициализирующих» битов.

Это выглядит hackish , поэтому не уверенесли есть более чистый или более подходящий способ сделать это.

1 Ответ

1 голос
/ 30 марта 2019

ApplicationRunner и CommandLineRunner - это правильные интерфейсы, которые необходимо реализовать для выполнения бизнес-логики, требующей внедрения зависимостей при запуске.Между ними нет большой разницы.

CommandLineRunner даст вам доступ к необработанному массиву String параметров, передаваемых при запуске.
ApplicationRunner даст вам более структурированный ApplicationArguments, но это все.

У вас может быть несколько начинающих бегунов, и вы даже можете заказать их.


Это кажется хакерским

Нет, это не так.ApplicationRunner и CommandLineRunner JavaDoc

Интерфейс, используемый для указания того, что bean-компонент должен работать, если он содержится в SpringApplication.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...