Java 如何使用spring批处理将数据库结果集转换为xml文件
我有如下spring批处理配置xml。如果我使用行映射器方法,它一次处理一个结果集。但我需要处理10个结果集,以便将其生成一个xml文件。结果集的前半部分将包含所有10个结果集的相同结果。十个结果集的另一半将指向不同的地址值。根据每个id,我需要提供十套地址。每个提供者可以有5个地址。我认为行映射器不适合这种情况。请建议合适的解决方案Java 如何使用spring批处理将数据库结果集转换为xml文件,java,spring,jaxb,spring-batch,resultset,Java,Spring,Jaxb,Spring Batch,Resultset,我有如下spring批处理配置xml。如果我使用行映射器方法,它一次处理一个结果集。但我需要处理10个结果集,以便将其生成一个xml文件。结果集的前半部分将包含所有10个结果集的相同结果。十个结果集的另一半将指向不同的地址值。根据每个id,我需要提供十套地址。每个提供者可以有5个地址。我认为行映射器不适合这种情况。请建议合适的解决方案 <bean id="pagingItemReader" class="org.springframework.batch.item.data
<bean id="pagingItemReader"
class="org.springframework.batch.item.database.JdbcPagingItemReader"
scope="step">
<property name="dataSource" ref="dataSource" />
<property name="queryProvider">
<bean
class="org.springframework.batch.item.database.support.SqlPagingQueryProviderFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="selectClause" value="select *" />
<property name="fromClause" value="from extract_VIEW" />
<property name="sortKey" value="PR_EXTRCT_ID" />
</bean>
</property>
<property name="pageSize" value="100" />
<property name="rowMapper">
<bean class="com.pr.comp.PrdrDataExtractRowMapper" />
</property>
</bean>
<bean id="xmlItemWriter" class="com.PR.comp.IndentingStaxEventItemWriter">
<property name="resource" value="file:xml1/output/pre1.xml" />
<property name="encoding" value="UTF-8" />
<property name="version" value="1.0" />
<property name="marshaller" ref="reportMarshaller" />
<property name="rootTagName" value="PrDtaReqst1"/>
<!-- TRUE means, that output file will be overwritten if exists - default is TRUE -->
<property name="overwriteOutput" value="true" />
</bean>
<bean id="reportMarshaller"
class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
<property name="classesToBeBound">
<value>com.pr.comp.model.jaxb.some.PrDataRequest</value>
</property>`enter code here`
</bean>
<batch:job id="someprocessingJob">
<batch:step id="step1">
<batch:tasklet>
<!-- <batch:chunk reader="dbItemReader" -->
<batch:chunk reader="pagingItemReader"
processor="itemProcessor"
writer="xmlItemWriter"
commit-interval="100" />
</batch:tasklet>
</batch:step>
</batch:job>
com.pr.comp.model.jaxb.some.PrDataRequest
`在这里输入代码`
我需要如下输出
<root element>
<Header>
<HeaderCode></HeaderCode>
</Header>
<PrDetailsRequest>
<UniqueIdentifier>1</UniqueIdentifier>
<PersonGroupName>
<FirstName></FirstName>
<MiddleInitialName></MiddleInitialName>
<LastName> mm</LastName>
</PersonGroupName>
<PrStatus>active</PrStatus>
<prAddress>
<AddressLine1>address1</AddressLine1>
<AddressLine2>address2</AddressLine2>
<CityName>everett</CityName>
<State>WA</State>
<Zip>2222</Zip>
<CountryCode></CountryCode>
<PhoneNumber>2222222222</PhoneNumber>
<Suffix>suffix</Suffix>
<indicator>N</indicator>
</prAddress>
<prAddress>
<AddressLine1>address21</AddressLine1>
<AddressLine2>address22</AddressLine2>
<CityName>everett</CityName>
<State>WA</State>
<Zip>2222</Zip>
<CountryCode></CountryCode>
<PhoneNumber>6666622</PhoneNumber>
<Suffix>suffix</Suffix>
<indicator>N</indicator>
</prAddress><prAddress>
<AddressLine1>address23</AddressLine1>
<AddressLine2>address24</AddressLine2>
<CityName>everett</CityName>
<State>WA</State>
<Zip>2222</Zip>
<CountryCode></CountryCode>
<PhoneNumber>2222222222</PhoneNumber>
<Suffix>suffix</Suffix>
<indicator>N</indicator>
</rootelement>
1.
嗯
积极的
地址1
地址2
埃弗里特
华盛顿州
2222
2222222222
后缀
N
地址21
地址22
埃弗里特
华盛顿州
2222
6666622
后缀
N
地址23
地址24
埃弗里特
华盛顿州
2222
2222222222
后缀
N
我碰巧编写了一个基于。它似乎适合您的用例。您需要创建一个表示XML模式根元素的模型类项
,以及一个与
对应的键
类型。pagingItemReader
返回的行属于RECORD
类型(例如,可以是包含每行键值对的Map
)。然后您需要注入两个lambda:
从每个keyExtractor
记录中提取唯一标识符
从下一条itemUpdater
记录更新正在构建的
项
我希望提供的测试用例有助于理解它是如何工作的。它不是在处理一个结果集,而是在处理结果集中的一行。
ResultSet
是查询的整个结果集。是的,您是对的。它正在处理ResultSet中的一行