2015-10-27 4 views
1

В настоящее время я разрабатываю весеннюю партию, которая преобразует файл Excel (.xsls) в CVS на первом шаге, а затем читает процесс CVS и сохраняет его данные в базе данных. Первый шаг работает хорошо. Партия останавливается на втором шаге, бросая это предупреждение: входной ресурс не существует ресурса пути класса [C: /work/referentielAgenceCE.csv]. Вот после того, как мой код:Весенняя партия: ресурс ввода не существует Ресурс пути класса

весна-config.xml:

<?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:aop="http://www.springframework.org/schema/aop" 
    xmlns:batch="http://www.springframework.org/schema/batch" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
     http://www.springframework.org/schema/aop 
    http://www.springframework.org/schema/aop/spring-aop-3.0.xsd 
    http://www.springframework.org/schema/batch 
    http://www.springframework.org/schema/batch/spring-batch-2.1.xsd"> 

    <!-- import config Spring générale --> 
    <import resource="classpath*:spring/***-batch-spring.xml" /> 

    <bean id="pathFichier" class="java.lang.String"> 
     <constructor-arg value="${batch.referentielAgenceCE.inputFilePathCSV}" /> 
    </bean> 

    <batch:job id="simpleFileImportJob" xmlns="http://www.springframework.org/schema/batch"> 
     <batch:step id="convertStep" next="processingStep"> 
      <batch:tasklet ref="convert"/> 
     </batch:step> 
     <batch:step id="processingStep"> 
      <batch:tasklet> 
       <batch:chunk reader="agenceCEReader" processor="agenceCEProcessor" writer="agenceCEWriter" 
        commit-interval="5" />    
      </batch:tasklet> 
     </batch:step> 
    </batch:job> 

    <bean id="convert" 
     class="com.***.referentielAgenceCE.convertTasklet.convertXLSXtoCVS" /> 

    <!-- Reader --> 
    <bean id="agenceCEReader" scope="step" 
     class="org.springframework.batch.item.file.FlatFileItemReader">  
     <property name="strict" value="false" /> 
     <property name="resource" ref="pathFichier" /> 
     <property name="linesToSkip" value="1" /> 
     <property name="lineMapper"> 
      <bean class="org.springframework.batch.item.file.mapping.DefaultLineMapper"> 
       <property name="lineTokenizer"> 
        <bean 
         class="org.springframework.batch.item.file.transform.DelimitedLineTokenizer"> 
         <property name="delimiter" value=";" /> 
         <property name="names" 
          value="Date Création,Date Dernière modif.,Date Début Validité,Date Fin Validité,Caisse,Identifiant Agence,Libellé Agence,Type Agence,Libellé Type Agence,Téléphone,Fax,2EME Ligne Adresse,3EME Ligne Adresse,4EME Ligne Adresse,5EME Ligne Adresse,6EME Ligne Adresse,Pays,Ville,Identifiant Niv. 1,Type Niv. 1,Libellé Niv. 1,Identifiant Niv. 2,Type Niv. 2,Libellé Niv. 2,Identifiant Niv. 3,Type Niv. 3,Libellé Niv. 3,Identifiant Niv. 4,Type Niv. 4,Libellé Niv. 4,Identifiant Niv. 5,Type Niv. 5,Libellé Niv. 5,Identifiant Niv. 6,Type Niv. 6,Libellé Niv. 6,Identifiant Niv. 7,Type Niv. 7,Libellé Niv. 7,Identifiant Niv. 8,Type Niv. 8,Libellé Niv. 8,Identifiant Niv. 9,Type Niv. 9,Libellé Niv. 9,Identifiant Niv. 10,Type Niv. 10,Libellé Niv. 10,Identifiant Niv. 11,Type Niv. 11,Libellé Niv. 11,Identifiant Niv. 12,Type Niv. 12,Libellé Niv. 12,Identifiant Niv. 13,Type Niv. 13,Libellé Niv. 13,Identifiant Niv. 14,Type Niv. 14,Libellé Niv. 14,Jours/Heures Ouverture,Code Etat" /> 
        </bean> 
       </property> 
       <property name="fieldSetMapper"> 
        <bean 
         class="com.***.referentielAgenceCE.mapping.AgenceCEFieldSetMapper" /> 
       </property> 
      </bean> 
     </property> 
    </bean> 

    <!-- Processor --> 
    <bean id="agenceCEProcessor" 
     class="com.***.referentielAgenceCE.processor.AgenceCEItemProcessor"/> 

    <!-- Writer --> 
    <bean id="agenceCEWriter" 
     class="com.***.referentielAgenceCE.writer.AgenceCEItemWriter" /> 
</beans> 

step1: convertXLSXtoCVS.java

public class convertXLSXtoCVS implements Tasklet, InitializingBean{ 


    @Value("${batch.referentielAgenceCE.inputFilePathXLSX}") 
    private String inputFile; 

    @Override 
    public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) 
      throws Exception { 
     System.out.println("convertXLSXtoCVS.execute1"); 
     // For storing data into CSV files     
     StringBuffer data = new StringBuffer();     
     try { 
      File outputFile = new File(getOutputFile(inputFile)); 
      FileWriter fw = new FileWriter(outputFile.getPath()); 

      BufferedWriter fos = new BufferedWriter(fw); 

      // Get the workbook object for XLSX file 
      XSSFWorkbook wBook = new XSSFWorkbook(new FileInputStream(inputFile)); 

      // Get first sheet from the workbook 
      XSSFSheet sheet = wBook.getSheetAt(0); 
      Row row; 
      Cell cell; 

      // Iterate through each rows from first sheet 
      Iterator<Row> rowIterator = sheet.iterator(); 
      while (rowIterator.hasNext()) { 
       row = rowIterator.next(); 
       // For each row, iterate through each columns 
       Iterator<Cell> cellIterator = row.cellIterator(); 
       while (cellIterator.hasNext()) { 
        cell = cellIterator.next(); 
        switch (cell.getCellType()) { 
         case Cell.CELL_TYPE_BOOLEAN:             
          data.append(cell.getBooleanCellValue() + ",");             
          break;           
         case Cell.CELL_TYPE_NUMERIC:             
          data.append(cell.getNumericCellValue() + ",");             
          break;           
         case Cell.CELL_TYPE_STRING:             
          data.append(cell.getStringCellValue() + ",");             
          break;           
         case Cell.CELL_TYPE_BLANK:             
          data.append("" + ",");             
          break; 
         default:             
          data.append(cell + ","); 
        } 
       } 
      } 
      fos.write(data.toString()); 
      fos.close(); 
     }catch (Exception ioe) { 
      ioe.printStackTrace(); 
     } 
     return RepeatStatus.FINISHED; 
    } 

    @Override 
    public void afterPropertiesSet() throws Exception { 
     Assert.notNull(inputFile, "inputFile must be set"); 

    } 

    public String getOutputFile(String inputFile){ 
     String[] parts = inputFile.split("\\."); 
     return parts[0]+"."+parts[1].replace("xlsx", "csv"); 
    } 

} 

Я упоминаю пути к файлам в файле свойств следующим образом:

batch.referentielAgenceCE.inputFilePathXLSX=C\:\\work\\referentielAgenceCE.xlsx 
batch.referentielAgenceCE.inputFilePathCSV=C\:\\work\\referentielAgenceCE.csv 

Когда я удалю из spring-config.xml в определении читателя, я получаю следующую ошибку:

org.springframework.batch.item.ItemStreamException: Failed to initialize the reader 
    at org.springframework.batch.item.support.AbstractItemCountingItemStreamItemReader.open(AbstractItemCountingItemStreamItemReader.java:137) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:309) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150) 
    at org.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:131) 
    at org.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:119) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) 
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202) 
    at $Proxy44.open(Unknown Source) 
    at org.springframework.batch.item.support.CompositeItemStream.open(CompositeItemStream.java:93) 
    at org.springframework.batch.core.step.tasklet.TaskletStep.open(TaskletStep.java:301) 
    at org.springframework.batch.core.step.AbstractStep.execute(AbstractStep.java:192) 
    at org.springframework.batch.core.job.SimpleStepHandler.handleStep(SimpleStepHandler.java:135) 
    at org.springframework.batch.core.job.flow.JobFlowExecutor.executeStep(JobFlowExecutor.java:61) 
    at org.springframework.batch.core.job.flow.support.state.StepState.handle(StepState.java:60) 
    at org.springframework.batch.core.job.flow.support.SimpleFlow.resume(SimpleFlow.java:144) 
    at org.springframework.batch.core.job.flow.support.SimpleFlow.start(SimpleFlow.java:124) 
    at org.springframework.batch.core.job.flow.FlowJob.doExecute(FlowJob.java:135) 
    at org.springframework.batch.core.job.AbstractJob.execute(AbstractJob.java:281) 
    at org.springframework.batch.core.launch.support.SimpleJobLauncher$1.run(SimpleJobLauncher.java:120) 
    at org.springframework.core.task.SyncTaskExecutor.execute(SyncTaskExecutor.java:48) 
    at org.springframework.batch.core.launch.support.SimpleJobLauncher.run(SimpleJobLauncher.java:114) 
    at org.springframework.batch.core.launch.support.CommandLineJobRunner.start(CommandLineJobRunner.java:349) 
    at org.springframework.batch.core.launch.support.CommandLineJobRunner.main(CommandLineJobRunner.java:574) 
Caused by: java.lang.IllegalStateException: Input resource must exist (reader is in 'strict' mode): URL [file://work//referentielAgenceCE.csv] 
    at org.springframework.batch.item.file.FlatFileItemReader.doOpen(FlatFileItemReader.java:250) 
    at org.springframework.batch.item.support.AbstractItemCountingItemStreamItemReader.open(AbstractItemCountingItemStreamItemReader.java:134) 
    ... 27 more 

ответ

2

Я нашел решение. Я должен просто добавить 'file:' в выходной путь cvs файла. так что это должно быть так: batch.referentielAgenceCE.inputFilePathCSV = file: C: \ work \ referentielAgenceCE.csv вместо C: \ work \ referentielAgenceCE.csv

1

Зрение:

Caused by: java.lang.IllegalStateException: Input resource must exist (reader is in 'strict' mode): URL [file://work//referentielAgenceCE.csv] 

И более точно:

file://work//referentielAgenceCE.csv 

Я думаю, вам нужно заменить:

batch.referentielAgenceCE.inputFilePathXLSX=C\:\\work\\referentielAgenceCE.xlsx 
batch.referentielAgenceCE.inputFilePathCSV=C\:\\work\\referentielAgenceCE.csv 

по

batch.referentielAgenceCE.inputFilePathXLSX=C:\\work\\referentielAgenceCE.xlsx 
batch.referentielAgenceCE.inputFilePathCSV=C:\\work\\referentielAgenceCE.csv 
+0

Я сделал это изменение: все еще не работает! –

+0

@NabilSalah Попробуйте с файлом: 'перед буквой драйвера (' файл: C: \\ work \\ referentielAgenceCE.xlsx') – Thrax

+0

Хуже всего на этот раз вернуть следующую ошибку: файл: C: \\ work \\ referentielAgenceCE. xlsx не существует –

Смежные вопросы