Ich benutze Springboot. Ich habe einen Batch-Job, den ich mit diesen Klassen implementiert haben:Warum Spring Boot Batch-Job nur einmal ausgeführt wird?
Meine Hauptklasse ist:
@SpringBootApplication
@ComponentScan("com.batch")
@PropertySource("classpath:application.properties")
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class);
}
}
Mein Scheduler ist:
@Component
@EnableScheduling
public class JobScheduler {
@Scheduled(fixedRate = 10000)
public void runJob() {
SpringApplication.run(MyBatchConfig.class);
}
}
und meine Batch-Konfigurationsklasse ist:
@Configuration
@EnableBatchProcessing
public class MyBatchConfig {
@Value("${database.driver}")
private String databaseDriver;
@Value("${database.url}")
private String databaseUrl;
@Value("${database.username}")
private String databaseUsername;
@Value("${database.password}")
private String databasePassword;
@Bean
public Job myJob(JobBuilderFactory jobs, Step s) {
Job job = jobs.get("myJob")
.incrementer(new RunIdIncrementer())
.flow(s)
.end()
.build();
return job;
}
@Bean
public Step myStep(StepBuilderFactory stepBuilderFactory, ItemReader<Account> reader,
ItemWriter<Person> writer, ItemProcessor<Account, Person> processor) {
TaskletStep step = stepBuilderFactory.get("myStep")
.<Account, Person>chunk(1)
.reader(reader)
.processor(processor)
.writer(writer)
.build();
step.setAllowStartIfComplete(true);
return step;
} ...
jetzt ist mein Problem:
der Scheduler funktioniert und es wiederholt sich alle 10 Sekunden, aber der Job führt nur beim Anwendungsstart (Leser, Prozessor und Schriftsteller nur einmal in Start ausführt) und es scheint, dass
SpringApplication.run(MyBatchConfig.class);
keine Auswirkung auf die Wieder- hat den Job ausführen.
was soll ich tun?
Vielen Dank im Voraus
Laufender Spring Boot wie dieser wird den Job ausführen und herunterfahren. Der Scheduler, der sich selbst wiederholt, wird sicherlich nicht das tun, was Sie wollen. –
Ich suchte im Web und viele Tutorials erwähnen, dass SpringApplication.run (MyBatchConfig.class); wird dazu führen, dass es erneut ausgeführt wird. aber in der Tat nicht. also was soll ich tun? –