2017-02-07 13 views
1

Springの純粋な注釈ベースの文書はありますか?私が見たドキュメントの90%はXML実装のために書かれています。デフォルトのJobLauncherをどのようにオーバーライドしますか?春バッチの注釈

JobParametersを渡すことができるようにデフォルトのJobLauncherをオーバーライドしようとしていますが、私が下のコードに追加したJobLauncher関数は無視され、代わりにデフォルトのSimpleJobLauncherが実行されます。

4つの異なるジョブパラメータを使用して、同じジョブの4つの同時インスタンスを起動したいとします。パラメータは、読み込み元の読者にどのディレクトリから読み込むかを伝える必要があります。

@Valueアノテーションを使用してディレクトリの値を渡すことはできますが、実行間で変更されないデフォルト値を設定できるように見えます。

私は

SpringApplication.run(Application.class, args); 

を使用して自分のアプリケーションを起動してい

@EnableBatchProcessing 
@Configuration 
public class BatchConfiguration{ 
    private static final Logger log = LoggerFactory.getLogger(BatchConfiguration.class); 

    @Resource 
    public JobLauncher jobLauncher; 

    @Resource 
    public JobBuilderFactory jobBuilderFactory; 

    @Resource 
    public StepBuilderFactory stepBuilderFactory; 

    @Bean 
    @StepScope 
    ItemReader<Record> reader(@Value("") String directory) { 
     return new ExcelReader(directory); 
    } 

    @Bean 
    public ItemProcessor processor() { 
     return new ItemProcessor(); 
    } 

    @Bean 
    public JobCompletionNotificationListener listener(){ 
     return new JobCompletionNotificationListener(); 
    } 

    @Bean 
    public Writer writer() { 
     Writer writer = new Writer(); 
     return writer; 
    } 

    //Job Definition 
    @Bean 
    public Job job(JobCompletionNotificationListener listener) { 
     return jobBuilderFactory.get("job") 
       .listener(listener) 
       .flow(step1("World")) 
       .end() 
       .build(); 
    } 

    @Bean 
    public Step step1(String directory) { 
     return stepBuilderFactory.get("step1") 
       .<Record, Record> chunk(10) 
       .reader(reader(directory)) 
       .processor(processor()) 
       .writer(writer()) 
       .build(); 
    } 
} 

(「世界」が完全に無視された)、私はそれを作成するときにジョブを構成することはできないのですがに良い方法はありますアプリケーションを起動しますか?

答えて

0

注釈のドキュメントに関するニュースはありませんが、パラメータを渡す答えが見つかりました。 xmlを使用していないので、代わりにAnnotationConfigApplicationContextを使用して、トップパッケージを指定できます。次に、このコンテキストを使用してデフォルトのジョブランチャーを取得し、ジョブを起動するときにパラメータを渡します。

ApplicationContext context = new AnnotationConfigApplicationContext("package.names.*"); 
    JobLauncher jobLauncher = (JobLauncher) context.getBean("jobLauncher"); 
    Job job = (Job) context.getBean("testJob"); 


    Map<String, JobParameter> params = new HashMap<String, JobParameter>(); 
    JobExecution execution = null; 
    JobParameters jp = null; 
    try { 
     params.put("directory", new JobParameter("testfolder")); 
     jp = new JobParameters(params); 
     execution = jobLauncher.run(job, jp); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
0

あなたはSBメタデータを永続化したい場合は、(推奨)のTransactionManager Beanを更新することができます。

@Bean 
    public ResourcelessTransactionManager transactionManager() { 
     return new ResourcelessTransactionManager(); 
    } 

    @Bean 
    public MapJobRepositoryFactoryBean mapJobRepositoryFactory(ResourcelessTransactionManager txManager) 
      throws Exception { 
     MapJobRepositoryFactoryBean factory = new MapJobRepositoryFactoryBean(txManager); 
     factory.afterPropertiesSet(); 
     return factory; 
    } 

    @Bean 
    public JobRepository jobRepository(MapJobRepositoryFactoryBean factory) throws Exception { 
     return factory.getObject(); 
    } 

    @Bean 
    public JobExplorer jobExplorer(MapJobRepositoryFactoryBean factory) { 
     return new SimpleJobExplorer(factory.getJobInstanceDao(), factory.getJobExecutionDao(), 
       factory.getStepExecutionDao(), factory.getExecutionContextDao()); 
    } 

    @Bean 
    public SimpleJobLauncher jobLauncher(JobRepository jobRepository) { 
     SimpleJobLauncher launcher = new SimpleJobLauncher(); 
     launcher.setJobRepository(jobRepository); 
     return launcher; 
    } 
関連する問題