Предисловие
В нашей реальной работе мы всегда сталкиваемся с таким требованием. Когда проект запускается, нам необходимо выполнить некоторые операции инициализации, такие как инициализация пула потоков, загрузка сертификата шифрования заранее и т. Д. Сегодня я представлю вам инструмент Spring Boot, который специально разработан, чтобы помочь вам решить работу ресурса инициализации запуска проекта.
Этот артефакт Commandlinerunner. Компонент интерфейса CommandLinerunner будет выполнен до SpressApplication.Run () после инициализации всех пружинных бобов, что очень подходит для некоторых работ инициализации данных в начале запуска приложения.
Далее мы будем использовать варианты, чтобы проверить, как он используется. Перед тестированием добавьте две строки печатных подсказок в класс запуска, чтобы облегчить нам определить время выполнения CommandLinerunner.
@Springbootapplicationpublic class CommandLineRunnerApplication {public static void main (string [] args) {System.out.println («Служба для начала»); SpringApplication.run (CommandLinerUnnerApplication.class, args); System.out.println («Служба началась»); }}Затем мы напрямую создаем класс, который наследует CommandLinerunner и реализует его метод run ().
@ComponentPublic Class Runner реализует commandlinerunner {@override public void run (string ... args) throws exection {System.out.println («Бегущий начинает инициализировать ...»); }}Мы печатаем некоторые параметры в методе run (), чтобы увидеть, как он выполняется. После завершения запустите проект для тестирования:
... Служба для начала .____ __ _ /// / ___''_ __ _ (_) _ ____ _ / / / / (() / ___ | '_ |' _ | / / / / / / / / / / / / / / / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | .__ || | _ | | _ | | _ | | _/__, | / / / / / =========================================================================================== OSBWEMBEDDDDED.TOMCAT.TOMCATWEBSERVER: TOMCAT запустил в порте (S): 8080 (http) с контекстом '' '2018-04-21 22: 21: 34.710 Информация 27016 --- [Main] com.neo.commandlinerunnerApplication: начало командования. Инициализировать ... Служба началась.
Основываясь на информации о печати консоли, мы видим, что метод в Commandlinerunner будет выполнен после загрузки пружинной загрузки, и проект будет запущен после завершения выполнения.
Если нам нужно инициализировать многие ресурсы при запуске контейнера, а начальные ресурсы упорядочены друг с другом, как мы можем обеспечить порядок выполнения разных Commandlinerunners? Spring Boot также предоставляет решение. То есть использовать аннотацию @Order.
Мы создаем два класса реализации CommandLinerunner для тестирования:
Первый класс реализации:
@Component @order (1) public class orderrunner1 реализует commandlinerunner {@override public void run (string ... args) throws exection {system.out.println («OrderRunner1 начинает инициализировать ...»); }}Второй класс реализации:
@Component @order (2) public class orderrunner2 реализует commandlinerunner {@override public void run (string ... args) throws exection {System.out.println («OrderRunner2 начинает инициализировать ...»); }}После того, как дополнение будет завершено, перезапустите и соблюдайте заказ на выполнение:
... Служба для начала. ____ _ __ _ ////// ___'_ __ __ _ (_) _ __ __ / / / / / (() / ___ | '_ |' _ | | / / // ___) | | | | | | | | | | | | | || (_ | |)))) '| ____ | .__ || | _ | | _ | | _/__, | / / / / ========================================================================================== Запуск на порту (S): 8080 (http) с контекстным путем '' 2018-04-21 22: 21: 34.710 Информация 27016 --- [Main] com.neo.commandlinerunnernerapplication: запустил Commandlinerunnernerapplication за 3,796 секунд (JVM, работающий на 5.128). ... Служба началась.
Благодаря выводу консоли мы обнаружили, что класс реализации, который добавляет аннотацию @Order, выполняется сначала, и чем меньше значение в @Order (), тем раньше начинается.
На практике такая же цель может быть достигнута с использованием ApplicationRunner, и между ними мало разницы.
Пример кода: https://github.com/ityounk/spring-cloud-examples (локальная загрузка)
Суммировать
Вышеуказанное - все содержание этой статьи. Я надеюсь, что содержание этой статьи имеет определенную справочную ценность для каждого обучения или работы. Если у вас есть какие -либо вопросы, вы можете оставить сообщение для общения. Спасибо за поддержку Wulin.com.