我正在創建一個Spring批處理應用程序,以便將數據從舊Sybase數據庫遷移到可加載到目標系統的csv文件。用於臨時表(創建並插入)和存儲過程執行組合的彈簧批處理讀取器
我在設計閱讀器配置時遇到問題。
可能對讀者輸入的組合:
- 直接SQL查詢(JdbcCursorReader適用) - 沒有問題
- 存儲過程(存儲過程的讀者是合適的) - 沒有問題
- 下面的步驟執行得到輸入的序列 - 我的問題
- 創建臨時表
- 插入值到臨時表
- 執行存儲過程(從臨時表,過程他們讀取輸入和輸出寫入到相同的臨時表)從插入的臨時表
- 讀數據
我被這個需求#3封鎖,請幫我解決問題。
注意:我正在使用Spring Batch的動態配置進行Spring啓動應用程序。
ItemReader<TreeMap<Integer, TableColumn>> itemReader = ReaderBuilder.getReader(sybaseDataSource, sybaseJdbcTemplate, workflowBean);
ItemProcessor<TreeMap<Integer, TableColumn>, TreeMap<Integer, TableColumn>> itemProcessor = ProcessorBuilder.getProcessor(workflowBean);
ItemWriter<TreeMap<Integer, TableColumn>> itemWriter = WriterBuilder.getWriter(workflowBean);
JobCompletionNotificationListener listener = new JobCompletionNotificationListener();
SimpleStepBuilder<TreeMap<Integer, TableColumn>, TreeMap<Integer, TableColumn>> stepBuilder = stepBuilderFactory
.get(CommonJobEnum.SBTCH_JOB_STEP_COMMON_NAME.getValue()).allowStartIfComplete(true)
.<TreeMap<Integer, TableColumn>, TreeMap<Integer, TableColumn>>chunk(10000).reader(itemReader);
if (itemProcessor != null) {
stepBuilder.processor(itemProcessor);
}
Step step = stepBuilder.writer(itemWriter).build();
String jobName = workflowBean.getiMTWorkflowTemplate().getNameWflTemplate() + workflowBean.getIdWorkflow();
job = jobBuilderFactory.get(jobName).incrementer(new RunIdIncrementer()).listener(listener).flow(step).end().build();
jobLauncher.run(job, jobParameters);
嗨馬克,感謝您的回覆。是的,ASE。我正在開發一個動態ETL工具(需求),它接收輸入(從一些設置表)作爲sql(帶/不帶參數),存儲過程名稱(帶/不帶參數/標準),多sql +存儲過程與多個結果集執行等等所有這些可能的組合。 BCP不適合我們。所以我們關注上述方法。如果你有任何想法,請投射一些燈。 – vijaidhas