2017-10-14 2 views
1

Ich versuche, einen Spring Batch-Job zu schreiben, der zwei Schritte enthält. Sie sind beide der gleiche Schritt, aber mit unterschiedlichen Dateipositionen. Als solche muss ich mehrere Zeichenfolgen in die Job-Bean übergeben, damit der Schritt weiß, wohin die verschiedenen Dateien gesendet werden sollen. Wenn ich jedoch versuche, die Resource-Werte zu übergeben, bekomme ich eine NoSuchBeanDefinitionException. Die Antworten, die ich dazu gefunden habe, ist, dass ich der Bean einen @ Value hinzufügen muss, um zu sagen, dass die Beans einen Parameter benötigen, um zu funktionieren. Aber das ist nur für einen Wert.Übergeben von mehreren @Value in einem @Bean in einer Java-Klasse

Gibt es eine Möglichkeit, mehrere @Values ​​mit Java-Konfiguration an eine Bean zu übergeben? Unten ist der Code, den ich verwende.

@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

Von der Eigenschaftendatei kann man keine Ressource bekommen. Sie können nur einige URLs oder Daten wie Integer usw. erhalten. – Mikhail

Antwort

0

Sie können eine getrennte Zeichenfolge als Eigenschaft übergeben und in eine Liste für Ihr Value-Objekt aufteilen.

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

Mit Ihrer application.property mit folgenden

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

können Sie dann diese Pfadzeichenfolgen verwenden Sie die entsprechende Ressource zu ergreifen, um von Ihrem Brenner verwendet werden.

0

Sie in einem String setzen, aber Sie sollten nicht in einem Rescource setzen? Habe ein nicht so schönes Beispiel, dass einmal für mich gearbeitet hat here. Maby kann dir helfen.

Verwandte Themen