Spring Boot で WindowsのコマンドラインやMacのターミナルからプログラムを実行する方法について記載します。
目次
1. コマンドからプログラムを実行するには?
次のいずれかのインタフェースを実装することで、コマンドから起動するプログラムを作成することができます。
・ApplicationRunner インタフェース
・CommandLineRunner インタフェース
大きな違いは、コマンド実行時に渡される引数の管理方法に違いがあります。
個人的におすすめは、ApplicationRunner になります。
2. ApplicationRunner を使用する方法
使用方法
・ApplicationRunner を実装します。
・runメソッドをオーバーライドします。
特徴
実行時に渡された引数が ApplicationArguments型で管理されます。
名前あり引数、名前なし引数を分けて取得することもできます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; import org.springframework.boot.Banner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class Sample1Application implements ApplicationRunner { /** * コマンド実行時に呼び出されるmain関数 * @param args */ public static void main(String[] args) { SpringApplication app = new SpringApplication(Sample1Application.class); app.setBannerMode(Banner.Mode.OFF); // 実行時に表示されるバナーを非表示にする app.run(args); } /** * ここに実行時の処理を書く * @param args incoming application arguments */ @Override public void run(ApplicationArguments args){ // コマンドの引数例:--param1=100 --param2=200 abc 123 // 全ての引数を取得 for( String arg : args.getSourceArgs() ){ System.out.println( arg ); // --param1=100 // --param2=200 // abc // 123 } // 名前付き引数を取得 System.out.println(args.getOptionNames()); // [param1, param2] // 特定の名前を指定して引数の値を取得 System.out.println(args.getOptionValues("param1")); // [100] // 名前なし引数を取得 System.out.println(args.getNonOptionArgs()); // [abc, 123] // 指定した名前の引数が含まれているか判定 System.out.println(args.containsOption("param2")); // true System.out.println(args.containsOption("param3")); // false } } |
3. CommandLineRunner を使用する方法
使用方法
・CommandLineRunner を実装します。
・runメソッドをオーバーライドします。
特徴
実行時に渡された引数が String型の配列 で管理されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
import org.springframework.boot.Banner; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class Sample2Application implements CommandLineRunner { /** * コマンド実行時に呼び出されるmain関数 * @param args */ public static void main(String[] args) { SpringApplication app = new SpringApplication(Sample2Application.class); app.setBannerMode(Banner.Mode.OFF); app.run(args); } /** * ここに実行時の処理を書く * @param args incoming main method arguments */ @Override public void run(String[] args){ // コマンドの引数例:--param1=100 --param2=200 abc 123 for(String arg : args){ System.out.println(arg); // --param1=100 // --param2=200 // abc // 123 } } } |
4. まとめ
個人的には、名前あり引数に特定の引数が存在するか簡単に判定できる ApplicationRunner がおすすめです。