Skip to content

Intégration dans Spring

lecogiteur edited this page May 29, 2013 · 6 revisions

Configuration

Il est possible d'intégrer très facilement Csvbang à Spring.

<bean name="csvWriterFactory" class="fr.csvbang.factory.FactoryCsvWriter">
   <constructor-arg value="my.package1,my.package2"/>
</bean>
<bean name="csvWriter" factory-bean="csvWriterFactory" scope="prototype" factory-method="createCsvWriter" />

L'instance du bean FactoryCsvWriter est un singleton et la configuration de CsvBang est chargée au chargement du contexte Spring une unique fois.

Il est possible de créer facilement un bean Factory (ici csvWriter) à partir de la méthode createCsvWriter. Mais ceci n'est pas obligatoire.

Utilisation

Deux exemples d'utilisation:

  • Création des classes d'écriture à partir de la fabrique FactoryCsvWriter
  • On laisse à Spring le soin de gérer la fabrique et la génération des beans.
public class Writer{
  @Autowired
  private FactoryCsvWriter csvWriterFactory;

  private BeanFactory springFactory;

  public CsvWriter getWriter(Class clazz){
    return csvWriterFactory.createCsvWriter(clazz, "myfile.csv");
    //or
    return (CsvWriter) springFactory.getBean("csvWriter", clazz, "myfile.csv");
  }
}

Spring Batch

Il est possible d'intégrer CsvBang à Spring Batch.

Un exemple simple:

La configuration

<bean name="csvWriterFactory" class="fr.csvbang.factory.FactoryCsvWriter">
   <constructor-arg value="my.package1,my.package2"/>
</bean>

Le Csv Bean

package my.package1;
@CsvType
public class MyEntity{
  
  @CsvField
  private String name;

  @CsvField
  private String address;

  public String getName(){
    return name;
  }

  public String getAddress(){
    return address;
  }
}

L'ItemWriter

@Component("myCsvItemWriter")
public class MyCsvItemWriter implements ItemWriter<MyEntity> {


  @Autowired
  private FactoryCsvWriter csvWriterFactory;

  private CsvWriter writer;

  @BeforeStep
  public void beforeStep(StepExecution stepExecution) {
    writer = csvWriterFactory.createCsvWriter(clazz, "myfile.csv");
  }

  @Override
  public void write(List<MyEntity> items) throws Exception {
    writer.write(items);
  }

 @AfterStep
  public void afterStep(StepExecution stepExecution) {
    writer.close();
  }
}