2015-08-18 52 views
1

我目前有一個工作的spring批處理應用程序,它使用ItemReader從Oracle數據庫讀取SQL視圖並將該數據寫入Excel文件。但是,我想從多個視圖中讀取數據並寫入同一個Excel文件 - 我該如何實現?使用spring批處理和apache poi寫入來自多個源的數據

代碼:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:batch="http://www.springframework.org/schema/batch" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:jdbc="http://www.springframework.org/schema/jdbc" xmlns:c24="http://schema.c24.biz/spring-core" 
    xmlns:bat-c24="http://schema.c24.biz/spring-batch" xmlns:util="http://www.springframework.org/schema/util" 
    xsi:schemaLocation=" 
     http://www.springframework.org/schema/batch http://www.springframework.org/schema/batch/spring-batch-2.1.xsd 
     http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.2.xsd 
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd 
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd 
     http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.2.xsd 
     http://schema.c24.biz/spring-core http://schema.c24.biz/spring-core.xsd 
     http://schema.c24.biz/spring-batch http://schema.c24.biz/spring-batch.xsd"> 


    <bean id="launchHelper" class="com.launcher.management.DummyPreJobHelper" /> 
    <bean id="rowMapper" class="com.exporter.DynamicComplexDataObjectRowMapper"/> 

    <bean id="itemReader" class="com.exporter.ViewJdbcCursorItemReader" scope="step"> 
     <property name="dataSource" ref="dataSource" /> 
     <property name="viewName" value="V_CARS" /> 
     <property name="fetchSize" value="5000" /> 
     <property name="rowMapper" ref="rowMapper" /> 
    </bean> 

    <bean id="itemWriter" class="com.exporter.ExcelFileItemWriter" scope="step"> 
     <property name="resource" value="file:${working.directory}/#{jobParameters['output.file']}" /> 
    </bean> 

    <!-- Batch job configuration --> 
    <batch:job id="excel-report-job"> 
     <batch:step id="export"> 
      <batch:tasklet allow-start-if-complete="true"> 
       <batch:chunk reader="itemReader" writer="itemWriter" commit-interval="5000"> 
        <batch:listeners> 
         <batch:listener> 
          <bean class="com.utils.LoggingStepListener" /> 
         </batch:listener> 
        </batch:listeners> 
       </batch:chunk> 
      </batch:tasklet> 
     </batch:step> 
    </batch:job> 
</beans> 

回答

1

請參閱此鏈接Write to different Sheets in a single excel file from multiple tables

我也想這樣做一次,我建議你在「itemWriter」@BeforeStep下面嘗試下面的步驟和代碼。

  1. 裝入EXEL文件和初始化您現有的Excel工作簿對象
  2. 如果該文件不存在,創建新的Excel工作簿對象
  3. 使用上述工作簿對象,並寫信給您希望您的數據的特定標籤在英寸


    File xlsxFile = new File(outputFilename); 
    if (xlsxFile.exists() && !xlsxFile.isDirectory()) { 
     InputStream fileIn = null; 
     try { 
      fileIn = new BufferedInputStream(new FileInputStream(xlsxFile), 100); 
      workbook = new SXSSFWorkbook(new XSSFWorkbook(fileIn), 100); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } finally { 
      if (fileIn != null) { 
       try { 
        fileIn.close(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
    } else { 
     workbook = new SXSSFWorkbook(100); 
    } 

相關問題