2017-10-14 8 views
1

J'essaie d'écrire un travail Spring Batch qui comporte deux étapes. Ils sont tous les deux la même étape mais avec des emplacements de fichiers différents. En tant que tel, j'ai besoin de passer plusieurs ficelles dans le haricot de travail pour laisser l'étape savoir où envoyer les différents fichiers. Cependant, si j'essaie de transmettre les valeurs Resource, j'obtiens une exception NoSuchBeanDefinitionException. Les réponses que j'ai trouvées à ceci est que j'ai besoin d'ajouter un @Value au bean pour lui dire que les beans ont besoin d'un paramètre pour fonctionner. Mais c'est pour une seule valeur.Passage de @Value multiple dans un @Bean dans une classe java

Existe-t-il un moyen de transmettre plusieurs @Values ​​à un bean en utilisant la configuration java? Voici le code que j'utilise.

@Value("#{'${batch.outputFile}'}") 
Resource outputFilePath; 

@Value("#{'${batch.outputFileTrg}'}") 
Resource outputFilePathTrg; 

@Bean 
public Step toServerStep(Resource outputFile) { 
    return stepBuilderFactory.get("toServerStep") 
           .chunk(1) 
           .reader(xmlFileItemReader()) 
           .writer((ItemWriter<? super Object>) flatFileItemWriter(outputFile)) 
           .build(); 
} 

@Bean 
public Job fileToServerJob(JobBuilderFactory jobBuilderFactory){ 
    return jobBuilderFactory.get("fileToServerJob") 
      .start(toServerStep(outputFilePath1)) 
      .next(toServerStep(outputFilePath2)) 
      .build(); 

}

+0

A partir du fichier de propriétés, vous ne pouvez pas obtenir de ressources. Vous ne pouvez obtenir que des URL ou des données, par exemple Integer, etc. – Mikhail

Répondre

0

Vous pouvez transmettre une chaîne délimitée en tant que propriété et la diviser en une liste pour votre objet Value.

@Value("#{'${batch.outputFiles}'.split(',')}") 
private List<String> outputFilePaths; 

Avec votre application.property avec les éléments suivants

batch.outputFiles=/tmp/a,/tmp/b,/tmp/c 

Vous pouvez ensuite utiliser ces chaînes de chemin pour saisir la ressource appropriée à utiliser par votre graveur.

0

Vous mettez dans une chaîne, mais ne devrait pas vous mettre dans un Rescource? Vous avez un exemple pas si gentil qui a déjà travaillé pour moi here. Maby ça peut t'aider.