gpt4 book ai didi

java - 在无限循环中运行的 Spring Batch 作业

转载 作者:搜寻专家 更新时间:2023-10-31 08:25:20 25 4
gpt4 key购买 nike

我正在处理简单的 Spring Batch Job。当我启 Action 业时,它会在无限循环中运行。它不会停止。根据我的调度程序时间,它应该每 10 秒运行一次。但是当工作开始时它不会停止。它只是分别从读取器、处理器和写入器中打印系统输出。我正在与阅读器、处理器和编写器一起创建工作。我正在通过注释进行所有配置。不是通过 xml。

这里是批量配置

@Configuration
@EnableBatchProcessing
@EnableScheduling
public class BatchJobConfig {

@Autowired
private JobBuilderFactory jobBuilderFactory;

@Autowired
private StepBuilderFactory stepBuilderFactory;

@Autowired
private SimpleJobLauncher jobLauncher;

@Scheduled(cron="*/10 * * * * *")
public void perform() throws Exception
{
Job job = job(step1());
JobParameters jobParameters = new JobParameters();
jobLauncher.run(job, jobParameters);
}

@Bean
public Step step1()
{
return stepBuilderFactory.get("step1").<Person, Person> chunk(1)
.reader(reader()).processor(processor()).writer(writer())
.build();
}

@Bean
public Job job(Step step1) throws Exception
{
return jobBuilderFactory.get("job")
.incrementer(new RunIdIncrementer()).flow(step1())
.end().build();
}

@Bean
public DataSource dataSource()
{
EmbeddedDatabaseBuilder embeddedDatabaseBuilder = new EmbeddedDatabaseBuilder();
return embeddedDatabaseBuilder.addScript("classpath:org/springframework/batch/core/schema-drop-hsqldb.sql")
.addScript("classpath:org/springframework/batch/core/schema-hsqldb.sql")
.setType(EmbeddedDatabaseType.HSQL)
.build();
}

@Bean
public PersonReader reader() {
return new PersonReader();
}
@Bean
public PersonWriter writer() {
return new PersonWriter();
}
@Bean
public PersonProcessor processor() {
return new PersonProcessor();
}

@Bean
public MapJobRepositoryFactoryBean mapJobRepositoryFactory(ResourcelessTransactionManager txManager) throws Exception {
MapJobRepositoryFactoryBean factory = new MapJobRepositoryFactoryBean(txManager);
factory.afterPropertiesSet();
return factory;
}
@Bean
public JobRepository jobRepository(MapJobRepositoryFactoryBean factory) throws Exception {
return factory.getObject();
}
@Bean
public SimpleJobLauncher jobLauncher(JobRepository jobRepository) {
SimpleJobLauncher launcher = new SimpleJobLauncher();
launcher.setJobRepository(jobRepository);
return launcher;
}
@Bean
public ResourcelessTransactionManager transactionManager() {
return new ResourcelessTransactionManager();
}
}

PersonReader.java

  public class PersonReader implements ItemReader<Person> {
@Override
public Person read() throws Exception, UnexpectedInputException, ParseException, NonTransientResourceException {
Person person = new Person();
System.out.println("In PersonReader");
return person;
}
}

PersonWriter.java

public class PersonWriter implements ItemWriter<Person> {
@Override
public void write(List<? extends Person> arg0) throws Exception {
System.out.println("IN PersonWriter");
}
}

PersonProcessor.java

public class PersonProcessor implements ItemProcessor<Person, Person> {
@Override
public Person process(Person arg0) throws Exception {
System.out.println("In PersonProcessor");
return arg0;
}
}

最佳答案

将运行一个步骤,直到您的 ItemReader 返回 null。在你的例子中,你的 ItemReader 永远不会(它总是返回一个新的 Person)所以它永远不会结束。

关于java - 在无限循环中运行的 Spring Batch 作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42834725/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com