Подготовка данных с помощью CommandLineRunner и @PostConstruct - PullRequest
0 голосов
/ 07 марта 2020

Мне нужно заполнить данные из текстового файла в реляционной БД и использовать данные из БД для построения структуры данных, Tire. БД основана на памяти.

В качестве традиционного подхода у меня есть код заполнения данных в методе CommandLineRunner класса @SpringBootApplication и код поиска данных в методе @PostConstruct класса обслуживания. Это, однако, не работает, как я думал, потому что метод @PostConstruct выполняется перед CommandLineRunner.

Чтобы решить эту проблему, я перемещаю код поиска данных также в метод CommandLineRunner. Однако этот подход создает связывание кода, поскольку структура данных используется только внутри класса обслуживания. Другой подход, о котором я могу подумать, - это ленивая инициализация данных для структуры данных. Из-за размера данных, около 110 тыс. Записей, время первого использования структуры данных будет очень медленным.

Есть ли лучший подход?

1 Ответ

0 голосов
/ 07 марта 2020

Вы можете использовать событие запуска приложения:

   // you can put this in any wired class or even in the Application class
    @EventListener
    public void onApplicationEvent(ContextRefreshedEvent event) {
         //Now you are sure Command line runner is done. 
     }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...