在spring批处理中从不同的数据库表中提取数据

时间:2014-10-17 16:13:09

标签: xml spring spring-batch xstream spring-oxm

我应该从特定数据库中提取数据并将其放入XML文件中。

但只能通过对数据库的多个选择查询来获取数据。

这是我的配置:

<!-- Reader for getting msisdn -->
<bean id="pagingdbItemReader2"
    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 SUBSTR(DN_NUM,4) AS MSISDN" />
            <property name="fromClause"
                value="FROM contr_services_cap cs, directory_number d" />
            <property name="whereClause"
                value="WHERE co_id in (select co_id from contract_all where customer_id =:CUSTOMER_ID)
                        AND cs.dn_id = d.dn_id 
                        AND cs.sncode = 1 
                        AND CS.MAIN_DIRNUM = 'X'" />
            <property name="sortKey" value="MSISDN" />
        </bean>
    </property>
    <property name="parameterValues">
        <map>
            <entry key="CUSTOMER_ID" value="#{jobParameters['CUSTOMER_ID']}" />
        </map>
    </property>
    <property name="pageSize" value="10" />
    <property name="rowMapper">
        <bean class="com.ooredoo.model.inputDB.MSISDNRowMapper" />
    </property>
</bean>

<!-- Writer for getting msisdn -->
<bean id="dbItemWriter2" class="org.springframework.batch.item.xml.StaxEventItemWriter">
    <property name="resource" value="file:xml/outputs/DonneesFactureFromDB.xml" />
    <property name="marshaller" ref="dbMarshaller2" />
    <property name="rootTagName" value="Facture" />
</bean>

<!-- Marshaller for getting msisdn -->
<bean id="dbMarshaller2" class="org.springframework.oxm.xstream.XStreamMarshaller">
    <property name="aliases">
        <util:map id="aliases">
            <entry key="msisdn" value="com.ooredoo.model.inputDB.MSISDN" />
        </util:map>
    </property>
</bean>

我是否可以为每个查询执行所有此配置(并创建相应的java类)?


修改

我已完成此配置,使用查询从数据库中提取数据&#34; A&#34; (而且它有效)。所以我的问题是:我是否应该为我想要执行的每个查询编写相同的配置(与读者,编写者,编组器等等)...或者我可以编写一种&#34;一组查询&#34;可以一个接一个地执行,并将结果呈现在一个XML文件中???

1 个答案:

答案 0 :(得分:0)

我认为您需要创建具有每个查询的多个阅读器,然后使用复合模式将它们链接在一起。

HTH