私はスプリングブートを使用しています。私は、これらのクラスを実装しましたバッチジョブを持っている:なぜスプリングブートバッチジョブは1回だけ実行されていますか?
私の主なクラスがある:
@SpringBootApplication
@ComponentScan("com.batch")
@PropertySource("classpath:application.properties")
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class);
}
}
私のスケジューラは、次のとおりです。
@Component
@EnableScheduling
public class JobScheduler {
@Scheduled(fixedRate = 10000)
public void runJob() {
SpringApplication.run(MyBatchConfig.class);
}
}
と私の一括設定クラスです:
@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;
} ...
今、私の問題は:
スケジューラの作品と、それは10秒ごとに繰り返され、 が、ジョブが唯一のアプリケーションの起動時に実行される(リーダー、プロセッサと作家ばかりのスタートアップに一度実行)、
SpringApplication.run(MyBatchConfig.class);
が再には影響しないと思われますジョブを実行している。
どうすればよいですか?あなたはJobLauncher
Beanを作成して、新しいジョブのインスタンスを起動するためのスケジューラにそれを使用する必要があり、事前
このようにSpring Bootを実行すると、ジョブが実行され、シャットダウンします。自分自身を再実行するスケジューラは、確かにあなたが望むことをするつもりはありません。 –
私はWebで検索し、多くのチュートリアルではSpringApplication.run(MyBatchConfig.class)と言います。再実行されます。実際にはそうではありません。だから何をすべきか? –