2017-05-29 18 views
2

私はSpringBunを使ってSpringBatchをテストしています。私の必要性は、Oracle Database上で動作するジョブを定義することですが、ジョブを保存してこのDB内の状態をステップしたくありません。 ドキュメントを読みました。MapJobRepositoryFactoryBeanでメモリ内リポジトリを使用できます。メモリ内JobRepositoryを定義する

その後、私はこのBean実装しました:

@Bean 
    public JobRepository jobRepository() { 
     MapJobRepositoryFactoryBean factoryBean = new MapJobRepositoryFactoryBean(new ResourcelessTransactionManager()); 
     try { 
      JobRepository jobRepository = factoryBean.getObject(); 
      return jobRepository; 
     } catch (Exception e) { 
      e.printStackTrace(); 
      return null; 
     } 
    } 

をしかし、私の仕事の開始時に、春のバッチが最初に行うことは、Oracle DBにテーブルを作成することで、Oracleデータソースを使用し続けます。私のJobRepositoryの定義は考慮されていないようです。

私は何を欠席しましたか?

EDIT:私は春のブート1.5.3と春のバッチに3.0.7

+0

JobLauncherの設定はどのようになっていますか?このリポジトリをあなたのjobLuncherにどのように設定していますか – pvpkiran

+0

ありがとう!私はJobLauncher beanを設定しませんでした。 – ChriX

答えて

1

を使用しています、私は私の問題を発見したpvpkiranのコメントをありがとうございました。 JobLauncher Beanを定義する必要があります。例以下は

@Bean 
public JobRepository jobRepository() { 
    MapJobRepositoryFactoryBean factoryBean = new MapJobRepositoryFactoryBean(new ResourcelessTransactionManager()); 
    try { 
     JobRepository jobRepository = factoryBean.getObject(); 
     return jobRepository; 
    } catch (Exception e) { 
     e.printStackTrace(); 
     return null; 
    } 
} 

@Bean 
public JobLauncher jobLauncher(JobRepository jobRepository) { 
    SimpleJobLauncher jobLauncher = new SimpleJobLauncher(); 
    jobLauncher.setJobRepository(jobRepository); 

    return jobLauncher; 
} 
+0

例外はバブルアップさせ、有害なノープキャッチブロックでキャッチしないでください。 – Vincent

2

ここにいくつかのこと:あなたがApplicationContextで設定DataSourceを持っている場合は

  1. は、デフォルトの春のバッチでそれを使用しようとします。
  2. ApplicationContextの中にDataSourceが存在しない場合は、BatchConfigurerを作成する必要があります。 DefaultBatchConfigurerを拡張することでそれを行うことができます。
  3. MapJobRepositoryは、テスト目的以外では使用しないでください。私はいくつかの問題(スレッドの安全性など)があり、プロダクションでの使用はお勧めしません。代わりに、HSQLDBのようなインメモリデータベースを使用してください(これを行うには、独自のBatchConfigurerを作成する必要があります)。
+0

ありがとうございました:) – ChriX

関連する問題