web-dev-qa-db-ja.com

Spring Bootコンソールベースのアプリケーションはどのように機能しますか?

かなりシンプルなSpring Bootコンソールベースのアプリケーションを開発している場合、メインの実行コードの配置について確信が持てません。 public static void main(String[] args)メソッドに配置するか、メインアプリケーションクラスにCommandLineRunnerインターフェイスを実装させ、コードをrun(String... args) method?

コンテキストとして例を使用します。次の[基本的な]アプリケーション(インターフェイスにコーディングされた、Springスタイル)があるとします。

Application.Java

public class Application {

  @Autowired
  private GreeterService greeterService;

  public static void main(String[] args) {
    // ******
    // *** Where do I place the following line of code
    // *** in a Spring Boot version of this application?
    // ******
    System.out.println(greeterService.greet(args));
  }
}

GreeterService.Java(インターフェイス)

public interface GreeterService {
  String greet(String[] tokens);
}

GreeterServiceImpl.Java(実装クラス)

@Service
public class GreeterServiceImpl implements GreeterService {
  public String greet(String[] tokens) {

    String defaultMessage = "hello world";

    if (args == null || args.length == 0) {
      return defaultMessage;
    }

    StringBuilder message = new StringBuilder();
    for (String token : tokens) {
      if (token == null) continue;
      message.append(token).append('-');
    }

    return message.length() > 0 ? message.toString() : defaultMessage;
  }
}

同等のSpring BootバージョンのApplication.Javaは次のようになります。GreeterServiceImpl.Java(実装クラス)

@EnableAutoConfiguration
public class Application
    // *** Should I bother to implement this interface for this simple app?
    implements CommandLineRunner {

    @Autowired
    private GreeterService greeterService;

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
        System.out.println(greeterService.greet(args)); // here?
    }

    // Only if I implement the CommandLineRunner interface...
    public void run(String... args) throws Exception {
        System.out.println(greeterService.greet(args)); // or here?
    }
}
37
Web User

標準ローダーが必要です:

@SpringBootApplication
public class MyDemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyDemoApplication.class, args);
    }
}

@ComponentアノテーションでCommandLineRunnerインターフェースを実装します

    @Component
    public class MyRunner implements CommandLineRunner {

       @Override    
       public void run(String... args) throws Exception {

      }
   }

@EnableAutoConfigurationは、通常のSpringBootマジックを実行します。

更新:

@jetonが示唆するように、後のSpringbootはストレートを実装します:

spring.main.web-environment=false
spring.main.banner-mode=off

72.2のドキュメント を参照してください

50
lrkwz