2013-03-26 120 views
2

嗨我們正在開發一個spring批處理,它處理SKU表中的所有SKU,並向庫存系統發送請求以獲取庫存詳細信息。發送給我們需要的,所以我們已經設置的pageSize爲100Spring批處理 - 在JdbcPagingItemReader中使用PageSize發佈

在讀者日誌

一次發送100個SKI IDS invetory細節: 我們看到

SELECT * FROM(SELECT S_ID,S_PRNT_PRD ,SQ,ROWNUM作爲TMP_ROW_NUM FROM XXX_SKU WHERE SQ> =:分鐘和SQ < =:最大ORDER BY SQ ASC)WHERE ROWNUM < = 100]

但是我們在對於一定的時間作家觀察100 SKU被髮送並且用於某些請求發送1個SKU。

public void write(List<? extends XXXPagingBean> pItems) throws XXXSkipItemException { 
if (mLogger.isLoggingDebug()) { 
mLogger.logDebug("XXXInventoryServiceWriter.write() method STARTING, ItemsList size:{0}" +pItems.size()); 
} 
.... 
.... 
} 
  • 的pageSize和commitInterval被設置爲100(在這些假設是相同?)
  • SORTKEY(SEQ_ID)應在相同一個partitiner柱用?

豆配置在XML:

<!-- InventoryService Writer configuration --> 

<bean id="inventoryGridService" class="atg.nucleus.spring.NucleusResolverUtil" factory-method="resolveName"> 
<constructor-arg value="/com/XXX/gigaspaces/inventorygrid/service/InventoryGridService" /> 
</bean> 

<bean id="inventoryWriter" class="com.XXX.batch.integrations.XXXXXX.XXXXInventoryServiceWriter" scope="step"> 
<property name="jdbcTemplate" ref="batchDsTemplate"></property> 
<property name="inventoryGridService" ref="inventoryGridService" /> 
</bean> 

<bean id="pagingReader" class="org.springframework.batch.item.database.JdbcPagingItemReader" xmlns="http://www.springframework.org/schema/beans" scope="step"> 
<property name="dataSource" ref="dataSource" /> 
<property name="queryProvider"> 
<bean id=" productQueryProvider" class="org.springframework.batch.item.database.support.SqlPagingQueryProviderFactoryBean"> 
<property name="dataSource" ref="dataSource" /> 
<property name="selectClause" value="select S_ID ,S_PRNT_PRD" /> 
<property name="fromClause" value="from XXX_SKU" /> 
<property name="sortKey" value="SEQ_ID" /> 
<property name="whereClause" value="SEQ_ID>=:min and SEQ_ID &lt;=:max"></property> 
</bean> 
</property> 
<property name="parameterValues"> 
<map> 
<entry key="min" value="#{stepExecutionContext[minValue]}"></entry> 
<entry key="max" value="#{stepExecutionContext[maxValue]}"></entry> 
</map> 
</property> 
<property name="pageSize" value="100" /> 
<property name="rowMapper"> 
<bean class="com.XXX.batch.integrations.endeca.XXXPagingRowMapper"></bean> 
</property> 
</bean> 

請建議。

+0

以100個組爲單位發送SKU的原因是什麼?他們是否以某種方式相互關聯? – 2013-03-28 22:49:57

+0

這是庫存呼叫和限制,我們只能向服務發送100個SKU。 – techanuva 2013-04-04 08:02:48

+0

您是否一次只能發送100個SKU,或者您可以發送100個或更少的號碼?如果是第二種情況,那麼爲什麼作家的行爲是一個問題? – 2013-04-04 08:23:08

回答

0

productQueryProvider bean定義中刪除whereClause並刪除您的parameterValues,它應該可以工作。 PagingQueryProvider會爲您自動處理分頁。沒有必要自己手動完成。