Comment Spring Batch Étape Portée De Travail
J'ai une exigence où j'ai besoin de traiter des fichiers basés sur le reste d'appel dans lequel je reçois le nom du fichier, je suis en ajoutant le paramètre de travail et de l'utiliser lors de la création des haricots.
Je suis de la création de l'étape de la portée de Haricots pour les (lecteur,écrivain) et en utilisant le paramètre de travail.Je suis en train de créer de l'emploi dans un nouveau thread, comme je suis en utilisant asynchronus tâche exceutor pour lancer le travail et ma question est de savoir comment les haricots être créé d'ici le printemps lorsque nous définissons @StepScope
jobParametersBuilder.addString("fileName", request.getFileName());
jobExecution = jobLauncher.run(job, jobParametersBuilder.toJobParameters());
@Bean
public JobLauncher jobLauncher() {
SimpleJobLauncher jobLauncher = new SimpleJobLauncher();
jobLauncher.setJobRepository(jobRepository());
jobLauncher.setTaskExecutor(asyncTaskExecutor());
return jobLauncher;
}
@Bean
@StepScope
public ItemWriter<Object> writer(@Value ("#{jobParameters['fileName']}"String fileName) {
JdbcBatchItemWriter<Object> writer = new JdbcBatchItemWriter<>();
writer.setItemSqlParameterSourceProvider(
new BeanPropertyItemSqlParameterSourceProvider<Object>());
writer.setSql(queryCollection.getquery());
writer.setDataSource(dataSource(fileName));
return writer;
}
cette
@Value ("#{jobParameters['fileName']}"String fileName) {
que vous avez fourni dans votre question, c'est une tuerie. thnx pour le partage.OriginalL'auteur lakshmi kanth | 2016-08-05
Vous devez vous connecter pour publier un commentaire.
Un spring batch
StepScope
objet en est un qui est unique à une étape spécifique et pas un singleton. Comme vous le savez probablement, la valeur par défaut de haricots portée au Printemps est un singleton. Mais en spécifiant un spring batch composantStepScope
signifie que Spring Batch va utiliser le printemps conteneur pour instancier une nouvelle instance de ce composant pour chaque étape de l'exécution.C'est souvent utiles pour faire de paramètre de liaison tardive où un paramètre peut être spécifié à l'
StepContext
ou laJobExecutionContext
niveau et doit être remplacé par un espace réservé, un peu comme votre exemple avec le nom de fichier exigence.Autre raison d'utiliser
StepScope
est lorsque vous décidez de réutiliser le même composant en parallèle les étapes. Si le composant gère tout état interne, il est important qu'il soitStepScope
, de sorte qu'un thread ne nuise pas à l'état gérés par un autre thread (e.g, chaque thread d'une étape donnée a sa propre instance de laStepScope
composant).OriginalL'auteur Naros