1. 概要

このクイックチュートリアルでは、Spring Bootを使用して単純なコンソールベースのアプリケーションを作成する方法について説明します。

2. Mavenの依存関係

私たちのプロジェクトは、スプリングブートの親に依存しています。

<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 という単一のクラスで構成されています。これは、SpringBootコンソールアプリケーションのメインクラスです。

自動構成を有効にするために、メインクラスでSpringの@SpringBootApplicationアノテーションを使用しています。

このクラスは、SpringのCommandLineRunnerインターフェイスも実装します。  CommandLineRunner は、runメソッドを備えたシンプルなSpringBootインターフェイスです。 Spring Bootは、アプリケーションコンテキストがロードされた後、このインターフェイスを実装するすべてのBeanのrunメソッドを自動的に呼び出します。

これが私たちのコンソールアプリケーションです:

@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プロパティも指定する必要があります。 このプロパティは、これがWebアプリケーションではないことを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 メソッドは、アプリケーションコンテキストがロードされた後、mainメソッドの実行が完了する前に呼び出されることに注意してください。

ほとんどのコンソールアプリケーションには、CommandLineRunnerを実装する単一のクラスしかありません。 アプリケーションにCommandLineRunnerを実装する複数のクラスがある場合、実行の順序はSpringの@Orderアノテーションを使用して指定できます。

4. 結論

この記事では、Spring Bootを使用して単純なコンソールベースのアプリケーションを作成する方法を要約しました。

ここでの例の完全なソースコードは、いつものように、GitHub上にあります。