我使用ItemReader/ItemWriter設置了一個Spring批處理作業,可將數據集從Oracle DB導出到CSV/Excel/PDF。對於閱讀器部分,我使用的是JdbcCursorItemReader。Spring批處理作業參數限制爲250個字符?
默認情況下它是必要的SQL語句傳遞給閱讀器來提取數據集 - 這是我的讀者的配置:
<bean id="readErgebnis" class="org.springframework.batch.item.database.JdbcCursorItemReader" scope="step">
<property name="dataSource" ref="dataSource" />
<property name="sql" value="#{jobParameters['stmt']}" />
<property name="rowMapper">
<bean class="myFancyRowMapper" />
</property>
</bean>
所以我加入了SQL語句來JobParametersBuilder ...
JobParametersBuilder builder = new JobParametersBuilder();
builder.addString("stmt", sql);
這應該沒問題。但是執行作業失敗,出現SQLException
。
現在我知道,春天批次記錄一切,它的日誌表,有問題 - 參數字符串(含SQL)被限制在250個字符。見BATCH_JOB_PARAMS表的定義:
CREATE TABLE BATCH_JOB_PARAMS (
JOB_INSTANCE_ID NUMBER(19,0) NOT NULL ,
TYPE_CD VARCHAR2(6) NOT NULL ,
KEY_NAME VARCHAR2(100) NOT NULL ,
STRING_VAL VARCHAR2(250),
DATE_VAL TIMESTAMP DEFAULT NULL ,
LONG_VAL NUMBER(19,0) ,
DOUBLE_VAL NUMBER ,
constraint JOB_INST_PARAMS_FK foreign key (JOB_INSTANCE_ID)
references BATCH_JOB_INSTANCE(JOB_INSTANCE_ID)
);
Spring Batch的商店每一項工作參數在一個新行,因此SQL語句進入STRING_VAL列被限制爲250個字符。我檢查了其他數據庫系統(MySQL和DB2)的DDL,它似乎只限於250個字符。我現在將該欄目更改爲CLOB
,工作正常,工作正常。
我的問題:我簡直不能相信,它的目的是通過存儲批處理作業限制在250個字符的工作參數。那麼對於我的方案是否有更好的實現,還是打算更改BATCH_JOB_PARAMS表中參數列的默認值?
不,你不應該修改元數據模式。看到我的迴應。 – Cygnusx1 2013-04-09 15:15:22