2016-04-25 14 views
0

Meine spring-boot Anwendung kann von der command line mit arguments als Parameter übergeben werden.If-Anweisung abhängig davon, welches Befehlszeilenargument übergeben wird?

Ich möchte meine main method so einrichten, dass, wenn ein Benutzer "a" als Argument übergeben: Aufgabe A wird ausgeführt. Wenn sie "b" als Argument übergeben, wird Task B ausgeführt.

Ich bin die Umsetzung dieses zur Zeit mit:

if(args.toString().contains("a")){ 
//run task A 
} 

Gibt es einen besseren Weg, dies zu tun/ist die obige Implementierung korrekt?

Voll Runner Klasse:

@Component 
public class MyRunner implements CommandLineRunner { 

    //other code 

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

     if(args.toString().contains("a")){ 
      //run task A 
     } 

     if(args.toString().contains("b")){ 
      //run task B 
     } 

    } 

} 
+0

Ich würde Checkout http://StackOverflow.com/Questions/367706/How-to-Parse-Command-Line-Arguments-in-Jav a für bessere Möglichkeiten, die eingehenden Argumente zu parsen. weil die Art, wie du es machst, viele falsche Positive haben wird. beispielsweise. Was passiert, wenn der Benutzer "Korb" als Argument übergibt? – karina

+3

Siehe [Problem mit der Java-Befehlszeilenargumente] (http://stackoverflow.com/questions/716153/java-command-line-arguments). Dies ist ein Duplikat. – jtmingus

Antwort

4

args.toString ist nicht das, was Sie wollen, wird es eine toString eines Arrays zurückgeben, so etwas wie: [Ljava.lang.String;@15db9742

Dies wahrscheinlich mehr sein würde, was Sie wollen:

for(String arg : args) { 
    if(arg.equals("a")) { // or .contains 
     // run task A 
    } 
} 
+0

Beachten Sie, dass mit dem erweiterten - für Sie * keine * Argumente übersprungen werden. Mir ist auch nicht klar, warum du überhaupt den ersten überspringst. – Makoto

+1

Ich habe mich verwirrt, ich denke C++, wo das erste Argument der vollständige Befehl ist –

Verwandte Themen