2017-11-09 14 views
1

すみませんが、これはいくつかの質問にはうってつけかもしれませんが、私の考えを超えてしまったので、私の考えを修正して専門家から適切な説明を得る価値があると思います。ホースプリングバッチアプリケーションが開始されました

私はちょうど春のバッチチュートリアルを開始し、これらのアプリケーションが開始されている混乱している。コンフィギュレーションクラスが

ある
@Configuration 
@EnableBatchProcessing 
public class BatchConfiguration { 

    @Autowired 
    public JobBuilderFactory jobBuilderFactory; 

    @Autowired 
    public StepBuilderFactory stepBuilderFactory; 

    @Autowired 
    public DataSource dataSource; 


    // tag::jobstep[] 
    @Bean 
    public Job importUserJob(JobCompletionNotificationListener listener) { 
     return jobBuilderFactory.get("importUserJob") 
       .incrementer(new RunIdIncrementer()) 
       .listener(listener) 
       .flow(step1()) 
       .end() 
       .build(); 
    } 

    @Bean 
    public Step step1() { 
     return stepBuilderFactory.get("step1") 
       .<Person, Person> chunk(10) 
       .reader(reader()) 
       .processor(processor()) 
       .writer(writer()) 
       .build(); 
    } 
    // end::jobstep[] 
} 

のは、公式サイトで

import org.springframework.boot.SpringApplication; 
import org.springframework.boot.autoconfigure.SpringBootApplication; 

@SpringBootApplication 
public class Application { 

    public static void main(String[] args) throws Exception { 
     SpringApplication.run(Application.class, args); 
    } 
} 

をこの例を見てみましょう、ここでここでは、main()方法は、アプリケーションを起動するために春ブーツのSpringApplication.run()メソッドを使用していることを述べました。

私はこの仕事を開始する明示的なコードが見つかりませんでしたが、それは唯一の構成部分(宣言)です。ここで

public static void main(String[] args) { 
    GenericApplicationContext context = new AnnotationConfigApplicationContext(MyBatchConfiguration.class); 
    JobLauncher jobLauncher = (JobLauncher) context.getBean("jobLauncher"); 
    Job job = (Job) context.getBean("myJobName");//this is bean name of your job 
    JobExecution execution = jobLauncher.run(job, jobParameters); 
} 

iは、ジョブがjobLauncherで実行されていることを理解することができます:

は、一方で私はこのような春のアプリケーションを起動するために、別の例サンザシを発見しました。

+1

Check https://stackoverflow.com/questions/23447948/how-spring-boot-run-batch-jobs –

答えて

1

これは、動作中の春のInversion of Control(IOCまたは依存性注入)です。基本的にこれは何が起こるかです:

  1. BatchConfiguration@Configuration注釈は、そのような関連する注釈
  2. @SpringBootApplicationそれはApplicationのパッケージと関連する注釈と注釈を付けたクラスのすべてのサブパッケージを検索する必要があることを春を告げるApplicationにある
  3. このクラスにアプリケーションの設定方法に関する情報が含まれていることをSpringに伝えます。これは、Springがこのクラスのインスタンスを作成し、それに関するすべての属性とメソッドをより多くの情報を参照して読み込むことを意味します。
  4. BatchConfigurationのさまざまなフィールドの注釈は、このクラスをインスタンス化するときに、これらのフィールドを該当するBean(注入)に設定する必要があることをSpringに伝えます。
  5. importUserJob@Beanアノテーションは、この方法は、豆を生成、これは春に、このメソッドを呼び出して、Jobタイプ(およびそれが継承する任意のインターフェイス/スーパークラス)下でimportUserJob名の下に得られた豆を格納することを意味する春を告げます。
  6. ビルドされたジョブの注釈は、Springからの他のアクションをトリガーします。おそらく、Springにさまざまな機能を実行させ、いくつかのイベントに接続するように指示する注釈が含まれている可能性があります。あるいは、別のBeanは、Jobのすべてのインスタンスを要求し、Springに実行を指示するメソッドでそれを処理します。

@EnableBatchProcessing注釈は、注射のために要求された豆を作るために他のパッケージとインポート他の設定クラスを検索するために春を告げるメタアノテーション(@Autowiredで注釈さ)が利用可能です。

IOCは初期段階で把握するのがかなり高度なコンセプトにすることができます。春は間違いなく最も簡単なIOCフレームワークではありませんが、私の個人的な好みですが、Spring FrameworkとIOCについて詳しく知りたい場合はまずdocumentationを読んでから、チュートリアルを検索してください。

+0

ありがとうございました@Raniz、この説明とLucaのコメントのおかげで私は全体を明確にすることができましたプロセス –

関連する問題