Java 是否根据操作类型调用特定的编写器?

Java 是否根据操作类型调用特定的编写器?,java,spring-batch,batch-processing,Java,Spring Batch,Batch Processing,我正在工作的一批读取每一行,插入到数据库以及写入文件。我想在数据库和文件中写入以下数据。因此需要使用分类器compositemWriter调用特定的编写器。我有一个包含以下行的文件: DATA,I,1,John,Shiazo,Sushi DATA,U,8,巴勃罗,卡门 数据,D,9,迭戈,塞尔吉奥 DATA,I,10,rucha,rekha 这里,I代表插入,U代表更新,D代表删除。我应该如何调用一个特定的编写器进行插入,另一个用于更新,另一个用于删除。这三个writer将根据操作(Insert

我正在工作的一批读取每一行,插入到数据库以及写入文件。我想在数据库和文件中写入以下数据。因此需要使用
分类器compositemWriter
调用特定的编写器。我有一个包含以下行的文件:

DATA,I,1,John,Shiazo,Sushi

DATA,U,8,巴勃罗,卡门

数据,D,9,迭戈,塞尔吉奥

DATA,I,10,rucha,rekha

这里,I代表插入,U代表更新,D代表删除。我应该如何调用一个特定的编写器进行插入,另一个用于更新,另一个用于删除。这三个writer将根据操作(Insert、Update和Delete)的不同而工作,另外还有一个writer将始终用于在文件中写入数据

下面是我的示例代码:

@Classifier
public List<String> classify(Object object) {
    String type = "Success";
    List<String> list = new ArrayList<String>();
    if(person.getOperationType().contentEquals("I")){
        String insert = "I";
        list.add(type);
        list.add(insert);   
    }else if(person.getOperationType().contentEquals("U")){
        String update = "U";
        list.add(type);
        list.add(insert);
    }else{
        delete = "D";
        list.add(type);
        list.add(delete);
    }
}
@分类器
公共列表分类(对象){
字符串类型=“成功”;
列表=新的ArrayList();
if(person.getOperationType().contentEquals(“I”)){
字符串insert=“I”;
列表。添加(类型);
列表。添加(插入);
}else if(person.getOperationType().contentEquals(“U”)){
字符串update=“U”;
列表。添加(类型);
列表。添加(插入);
}否则{
删除=“D”;
列表。添加(类型);
列表。添加(删除);
}
}
xml编写器代码示例:

<bean id="classifierFileItemWriter" class="org.springframework.batch.item.support.ClassifierCompositeItemWriter" scope="step">       <property name="classifier">           <bean class="org.springframework.classify.BackToBackPatternClassifier">             <property name="routerDelegate">
                <bean class="com.iz.batchprocessing.writer.SuccessFailClassifier" scope="step"/>
            </property>
            <property name="matcherMap">
                <map>
                     <entry key="I" value-ref="jdbcInsertItemWriter" /> //insert writer, here I want access ArrayList
                     <entry key="U" value-ref="jdbcUpdateItemWriter" /> //update writer, here I want access ArrayList
                     <entry key="D" value-ref="jdbcDeleteItemWriter" /> //delete writer, here I want access ArrayList
                     <entry key="Success" value-ref="successMultiFileItemWriter" /> //common file writer
                </map>
            </property>
             </bean>     
        </property> </bean>

//插入写入程序,在这里我要访问ArrayList
//更新写入程序,这里我要访问ArrayList
//删除写入程序,这里我要访问ArrayList
//通用文件编写器

请告诉我怎么做?或者有其他方法来实现这一点吗?

我没有研究过这种类型的编写器,但是通过查看和回答-Serkan Arıkuşu,我发现您需要从
分类器
返回一个值/键,
matcherMap
将使用该值/键来映射适当的编写器

我看到您没有从分类器返回任何,您只是对这些字符串变量赋值,但没有返回任何内容

通过查看该答案,我可以说您需要将该密钥嵌入正在编写的
项目中,并从
分类器中返回每个项目的密钥

Mukesh Sabde的回答有一个完整的代码示例

您不应该向列表中添加字符串并返回列表,而应该返回连接的字符串,这些字符串应该是matcher映射中的键

我看了
backtobackpatternsider
类的代码,它有两个私有字段-
私有分类器路由器&

private Classifier<String, T> matcher;
私有分类器匹配器;
因此,不能将
列表
指定为
匹配映射
属性的键。那一定是一根绳子,你错了

对于您的情况,
C
是要编写的Spring批
Item
,而
T
ItemWriter


希望能有帮助

我没有研究过这种类型的编写器,但是通过查看和回答-Serkan Arıkuşu,我发现您需要从
分类器中返回一个值/键,该值/键将由
匹配器映射到相应的编写器

我看到您没有从分类器返回任何,您只是对这些字符串变量赋值,但没有返回任何内容

通过查看该答案,我可以说您需要将该密钥嵌入正在编写的
项目中,并从
分类器中返回每个项目的密钥

Mukesh Sabde的回答有一个完整的代码示例

您不应该向列表中添加字符串并返回列表,而应该返回连接的字符串,这些字符串应该是matcher映射中的键

我看了
backtobackpatternsider
类的代码,它有两个私有字段-
私有分类器路由器&

private Classifier<String, T> matcher;
私有分类器匹配器;
因此,不能将
列表
指定为
匹配映射
属性的键。那一定是一根绳子,你错了

对于您的情况,
C
是要编写的Spring批
Item
,而
T
ItemWriter


希望能有帮助

你在哪里准备这份清单?在处理器中?为什么你需要三个独立的编写器,在一个编写器中使用三种不同的方法不起作用?你的问题仅仅是问,如何使用
classifiercompositemwriter
?不,我的问题不是如何使用
classifiercompositemwriter
。我正在准备这份清单。由于我使用的是SpringBatch的xml配置,因为我对SpringBatch了解很多,所以我不能在SpringBatch中使用任何三种不同的方法。如果你知道,请张贴一个示例代码。我想从分类器发送多个参数,如“Success and I”或“Success and D”或“Success and U”。仅在这一点上,我感到很骄傲。你在哪里准备这份清单?在处理器中?为什么你需要三个独立的编写器,在一个编写器中使用三种不同的方法不起作用?你的问题仅仅是问,如何使用
classifiercompositemwriter
?不,我的问题不是如何使用
classifiercompositemwriter
。我正在准备这份清单。由于我使用的是SpringBatch的xml配置,因为我对SpringBatch了解很多,所以我不能在SpringBatch中使用任何三种不同的方法。如果你知道,请张贴一个示例代码。我想从分类器发送多个参数,如“Success and I”或“Success and D”或“Success and U”。仅在这一点上,我感到骄傲。谢谢你回答我的问题。在某种程度上,你的答案是有帮助的