かなりシンプルな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?
}
}
標準ローダーが必要です:
@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のドキュメント を参照してください