2

Spring Batch 2.2 を JavaConfig で動作させようとしています。

最近では@EnableBatchProcessing、多くのことを設定する注釈があります。デフォルトでは、アノテーションはそのジョブ データにデータソースを使用しますが、このデータを保存したくなく、そのためのテーブルを作成したくありません。ドキュメントにはカスタマイズについて何か書かれていますが、私はそれを機能させることができませんでした:

  • ユーザーはDataSource、コンテキスト内で を Bean として提供するかBatchConfigurer、構成クラス自体に実装する必要があります。たとえば、次のようになります。

public class AppConfig extends DefaultBatchConfigurer {

以前のバージョンでは、MapJobRepositoryFactoryBeanクラスを使用してすべてのデータをメモリに保持できました。を定義せずに完全なJavaConfigの方法を使用する方法はありますDataSourceか? 私はそれを機能させることができませんでした。

2 つのデータ ソース (使用されない 1 つの HSQL インメモリ) と実際の Oracle データソースを定義しても、1 つではなく 2 つのデータ ソースが検出されるため、機能しません。

これを機能させる方法を知っている人はいますか?それとも、XML の方法でこれを構成することに戻る唯一の解決策ですか?

4

2 に答える 2

6

他のアーティファクトが DataSource を必要としないと仮定すると、java config を使用して、DataSource なしでコンテキストを作成できます。これを行うには、指摘したように、構成で DefaultBatchConfigurer を拡張する必要があります。そこで、createJobRepository() と setDataSource() の 2 つのメソッドをオーバーライドします。以下はコンテキストの例です (ジョブやステップを定義していませんが、関連するすべての Bean を正しくブートストラップします)。

@Configuration
@EnableBatchProcessing
public static class BatchConfiguration extends DefaultBatchConfigurer {

    @Override
    protected JobRepository createJobRepository() throws Exception {
        MapJobRepositoryFactoryBean factory = 
            new MapJobRepositoryFactoryBean();
        factory.afterPropertiesSet();
        return  (JobRepository) factory.getObject();
    }

    @Override
    @Autowired
    public void setDataSource(DataSource dataSource) {
        if(dataSource != null) {
            super.setDataSource(dataSource);
        }
    }

    @Bean
    public DataSource dataSource() {
        return null;
    }
}

これを簡素化することは便利な機能だと思い、Jira に追加しました。ここで進行状況を追跡できます: https://jira.springsource.org/browse/BATCH-2048

于 2013-06-13T19:01:32.400 に答える
-1

BatchConfig クラスで dataSource() メソッドを定義するだけです。

@Bean
public DataSource dataSource() {
    BasicDataSource dataSource = new BasicDataSource();
    dataSource.setDriverClassName(driverClassName);
    dataSource.setUrl(driverUrl);
    dataSource.setUsername(driverUsername);
    dataSource.setPassword(driverPassword);
    return dataSource;
}

これは、TransactionManager のセットアップ中に自動的に呼び出されます。

于 2013-08-06T04:06:12.147 に答える