Comment faire pour exécuter plusieurs tâches dans spring batch à l'aide d'annotations
Je suis à l'aide de Spring Boot + Spring Batch (annotation) , sont venus à travers un scénario où je dois courir 2 emplois.
J'ai Employé et le Salaire records, qui a des besoins à la mise à jour à l'aide de spring batch. J'ai configuré le BatchConiguration
classes en suivant ce tutoriel printemps-lot tutoriel d'initiation de l'Employé et du Salaire des objets, nommés respectivement comme BatchConfigurationEmployee & BatchConfigurationSalary.
J'ai Défini le ItemReader
, ItemProcessor
, ItemWriter
et Job
en suivant le tutoriel qui est mentionné ci-dessus déjà.
Lorsque je démarre mon Printemps de Démarrage de l'application, soit de l'exécution du Travail, je veux courir à la fois la BatchConfigured classes. Comment puis-je réaliser cette
********* BatchConfigurationEmployee.java *************
@Configuration
@EnableBatchProcessing
public class BatchConfigurationEmployee {
public ItemReader<employee> reader() {
return new EmployeeItemReader();
}
@Bean
public ItemProcessor<Employee, Employee> processor() {
return new EmployeeItemProcessor();
}
@Bean
public Job Employee(JobBuilderFactory jobs, Step s1) {
return jobs.get("Employee")
.incrementer(new RunIdIncrementer())
.flow(s1)
.end()
.build();
}
@Bean
public Step step1(StepBuilderFactory stepBuilderFactory, ItemReader<Employee> reader,
ItemProcessor<Employee, Employee> processor) {
return stepBuilderFactory.get("step1")
.<Employee, Employee> chunk(1)
.reader(reader)
.processor(processor)
.build();
}
}
Classe de salaire est ici
@Configuration
@EnableBatchProcessing
public class BatchConfigurationSalary {
public ItemReader<Salary> reader() {
return new SalaryItemReader();
}
@Bean
public ItemProcessor<Salary, Salary> processor() {
return new SalaryItemProcessor();
}
@Bean
public Job salary(JobBuilderFactory jobs, Step s1) {
return jobs.get("Salary")
.incrementer(new RunIdIncrementer())
.flow(s1)
.end()
.build();
}
@Bean
public Step step1(StepBuilderFactory stepBuilderFactory, ItemReader<Salary> reader,
ItemProcessor<Salary, Salary> processor) {
return stepBuilderFactory.get("step1")
.<Salary, Salary> chunk(1)
.reader(reader)
.processor(processor)
.build();
}
}
OriginalL'auteur Hurix | 2015-11-29
Vous devez vous connecter pour publier un commentaire.
Les noms des Haricots doivent être uniques dans l'ensemble de Printemps Contexte.
Dans les deux cas, vous êtes de l'instanciation, le lecteur, l'écrivain et le processeur avec le même methodname. Le methodname est le nom qui est utilisé pour repérer la fève dans le contexte.
Dans l'emploi des définitions, vous avez reader(), écrivain() et le processeur(). Elles remplacent les uns les autres. Leur donner des noms uniques comme readerEmployee(), readerSalary() et ainsi de suite.
Qui devrait résoudre votre problème.
OriginalL'auteur Hansjoerg Wingeier
Vous les emplois ne sont pas annotées avec @Bean, de sorte que le ressort contexte ne le connais pas.
Ont un look à la classe JobLauncherCommandLineRunner. Tous les Haricots dans le SpringContext la mise en œuvre de l'Emploi de l'interface sera injecté. Tous les travaux seront exécutés. (ce qui se passe à l'intérieur de la méthode executeLocalJobs dans JobLauncherCommandLineRunner)
Si, pour une raison quelconque, vous ne voulez pas de les avoir comme les haricots dans le contexte, alors vous devez inscrire vos travaux avec le jobregistry.( la méthode execute registeredJobs de JobLauncherCommandLineRunner prendra soin de lancer le régime enregistré d'emplois)
BTW, vous pouvez contrôler avec la propriété
laquelle les travaux devraient être lancés.
est-il toujours le même travail, qui est en cours d'exécution, ou faut-il changer?
Oui, Il court toujours le BatchConfigurationEmployee classe.
Ok, je le vois. Je vais écrire une autre réponse
OriginalL'auteur Hansjoerg Wingeier