我的问题的关键是如何在使用Spring Batch代理注入属性时,键入属性以从两个不同的接口公开方法 .

我的设计问题是关于如何注入Spring已代理在Spring Batch中使用的依赖项 . 依赖关系由Spring代理,因为它已被限定为Spring Batch步骤 . 这是必需的,因为依赖项具有必须从Spring Batch作业参数注入的值 . 将bean限定为Spring Batch步骤是在ExecutionContext中使依赖项可用的最佳方法,以便可以注入作业参数 . 如何解决这个问题的任何输入将非常感激 .

我的具体情况是在Spring批处理中实现AggregateItemReader,如Spring Batch Samples中所述 . 您可以找到示例AggregateItemReader herejavadoc的源代码 .

不同之处在于我的实现打算使用JdbcCursorItemReader来聚合 . 这意味着我的AggregateItemReader必须实现接口ItemReader和ItemStream . 这允许Spring Batch通过公开Spring Batch管理ItemStream所需的open(ExecutionContext executionContext),update(ExecutionContext executionContext)和close()方法来正确使用我的AggregateItemReader . 此外,我的AggregateItemReader中存储对处理数据加载的ItemReader的引用的属性必须提供对这些相同方法的访问 . 因此该属性键入JdbcCursorItemReader . 这引入了一个问题,因为Spring Batch创建的代理依赖于依赖项的接口,ItemReader和ItemStream . 这些类型的代理不能注入到JdbcCursorItemReader类型的属性中 .