Перейти к основному содержимому

Консольное приложение на Spring Boot

· 3 мин. чтения

Задача: Сумма двух чисел

Напишите функцию twoSum. Которая получает массив целых чисел nums и целую сумму target, а возвращает индексы двух чисел, сумма которых равна target. Любой набор входных данных имеет ровно одно решение, и вы не можете использовать один и тот же элемент дважды. Ответ можно возвращать в любом порядке...

ANDROMEDA

1. Обзор

В этом кратком руководстве мы рассмотрим, как создать простое консольное приложение с использованием Spring Boot.

2. Зависимости Maven

Наш проект опирается на родителя spring-boot:

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.0</version>
</parent>

Требуемая исходная зависимость:

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>

3. Консольное приложение

Наше консольное приложение состоит из одного класса: SpringBootConsoleApplication.java — это основной класс для нашего консольного приложения Spring Boot.

Мы используем аннотацию Spring @SpringBootApplication в нашем основном классе, чтобы включить автоматическую настройку.

Этот класс также реализует интерфейс Spring CommandLineRunner . CommandLineRunner — это простой интерфейс Spring Boot с методом запуска . Spring Boot автоматически вызовет метод run всех bean-компонентов, реализующих этот интерфейс, после загрузки контекста приложения.

Вот наше консольное приложение:

@SpringBootApplication
public class SpringBootConsoleApplication
implements CommandLineRunner {

private static Logger LOG = LoggerFactory
.getLogger(SpringBootConsoleApplication.class);

public static void main(String[] args) {
LOG.info("STARTING THE APPLICATION");
SpringApplication.run(SpringBootConsoleApplication.class, args);
LOG.info("APPLICATION FINISHED");
}

@Override
public void run(String... args) {
LOG.info("EXECUTING : command line runner");

for (int i = 0; i < args.length; ++i) {
LOG.info("args[{}]: {}", i, args[i]);
}
}
}

Мы также должны указать свойство spring.main.web-application-type=NONE Spring . Это свойство явно сообщит Spring, что это не веб-приложение.

Когда мы запускаем SpringBootConsoleApplication , мы видим в журнале следующее:

00:48:51.888 [main] INFO  c.b.s.SpringBootConsoleApplication - STARTING THE APPLICATION
00:48:52.752 [main] INFO c.b.s.SpringBootConsoleApplication - No active profile set, falling back to default profiles: default
00:48:52.851 [main] INFO o.s.c.a.AnnotationConfigApplicationContext
- Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@6497b078: startup date [Sat Jun 16 00:48:52 IST 2018]; root of context hierarchy
00:48:53.832 [main] INFO o.s.j.e.a.AnnotationMBeanExporter - Registering beans for JMX exposure on startup
00:48:53.854 [main] INFO c.b.s.SpringBootConsoleApplication - EXECUTING : command line runner
00:48:53.854 [main] INFO c.b.s.SpringBootConsoleApplication - args[0]: Hello World!
00:48:53.860 [main] INFO c.b.s.SpringBootConsoleApplication - Started SpringBootConsoleApplication in 1.633 seconds (JVM running for 2.373)
00:48:53.860 [main] INFO c.b.s.SpringBootConsoleApplication - APPLICATION FINISHED
00:48:53.868 [Thread-2] INFO o.s.c.a.AnnotationConfigApplicationContext
- Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@6497b078: startup date [Sat Jun 16 00:48:52 IST 2018]; root of context hierarchy
00:48:53.870 [Thread-2] INFO o.s.j.e.a.AnnotationMBeanExporter - Unregistering JMX-exposed beans on shutdown

Обратите внимание, что метод run вызывается после загрузки контекста приложения, но до завершения выполнения основного метода.

Большинство консольных приложений имеют только один класс, реализующий CommandLineRunner . Если в вашем приложении есть несколько классов, реализующих CommandLineRunner , порядок выполнения можно указать с помощью аннотации Spring @Order .

4. Вывод

В этой статье мы рассказали, как создать простое консольное приложение с помощью Spring Boot.

Полный исходный код наших примеров здесь, как всегда, находится на GitHub .