Reputation: 123
If I want to have several jobs in my batch project. Each file only contains a single job.
Job 1:
@Configuration
public class StartTest1 {
@Autowired
JobBuilderFactory jobBuilderFactory;
@Autowired
StepBuilderFactory stepBuilderFactory;
@Bean
public Job processJob() {
return jobBuilderFactory.get("processJob1").incrementer(new RunIdIncrementer())....;
}
....
}
Job 2:
@Configuration
public class StartTest2 {
@Autowired
JobBuilderFactory jobBuilderFactory;
@Autowired
StepBuilderFactory stepBuilderFactory;
@Bean
public Job processJob() {
return jobBuilderFactory.get("processJob2").incrementer(new RunIdIncrementer())....;
}
....
}
I tried to set @Configuration annotation for each class. But only one job executes at run time. How can I do to have multiple job files?
Upvotes: 0
Views: 4548
Reputation: 123
I find another way,
set different bean name!
Job 1:
@Configuration
public class StartTest1 {
@Autowired
JobBuilderFactory jobBuilderFactory;
@Autowired
StepBuilderFactory stepBuilderFactory;
@Bean("job1")
public Job processJob() {
return jobBuilderFactory.get("processJob1").incrementer(new RunIdIncrementer())....;
}
....
}
Job 2:
@Configuration
public class StartTest2 {
@Autowired
JobBuilderFactory jobBuilderFactory;
@Autowired
StepBuilderFactory stepBuilderFactory;
@Bean("job2")
public Job processJob() {
return jobBuilderFactory.get("processJob2").incrementer(new RunIdIncrementer())....;
}
....
}
Upvotes: 0
Reputation: 705
I think that the problem is that both job beans have the same name processJob
, so one overwrites the other when the application context gets built. The simplest solution would be to use unique bean names like the names you are giving the Job
s: processJob1
, processJob2
.
Upvotes: 2