2017-05-09 6 views
3

質問:以下のMyServiceのように、@Beanの春の起動方法のvarargsにはどのようにアクセスできますか?spring beanのコマンドライン引数にアクセスするには?

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

@Component 
public MyService { 
     public void run() { 
       //read varargs 
     } 
} 

のJava -jar [jarファイル] [コマンドライン引数]スプリングソースコードを分析することにより

+0

?引数はあなたのメインクラスに渡されるか、一般に任意のvarargに渡されますか? – pvpkiran

+0

私は、コマンドラインからjarを起動するときに渡される引数を意味します。 – membersound

+2

メソッドrun(String ...)を持つCommandLineRunnerクラスを実装すると、このvarargsを得ることができます – pvpkiran

答えて

7

は、そのスプリングは、クラスのメソッドprepareContextタイプApplicationArgumentsのシングルトンビーンを登録思わSpringApplication

context.getBeanFactory().registerSingleton("springApplicationArguments", 
      applicationArguments); 

だから私はあなたのサービスでこのBeanをautowireすることができると思う:

@pvpkiranのヒントに
@Component 
public MyService { 

     @Autowired 
     private ApplicationArguments applicationArguments; 

     public void run() { 
      //read varargs 
      applicationArguments.getSourceArgs(); 

     } 
} 
2

ありがとう:

あなたが意味するか可変引数
@Component 
public class CommandLineHolder implements CommandLineRunner { 
    private String[] args; 

    @Override 
    public void run(String... args) throws Exception { 
     this.args = args; 
    } 

    public String[] getArgs() { 
     return args; 
    } 
} 
関連する問題