我正在做简单的Spring批量工作。当我启动作业时,它在无限循环中运行。它不会停止。根据我的时间表,它应该每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;
}
}
人Writer.java
public class PersonWriter implements ItemWriter<Person> {
@Override
public void write(List<? extends Person> arg0) throws Exception {
System.out.println("IN PersonWriter");
}
}
个人处理器。JAVA
public class PersonProcessor implements ItemProcessor<Person, Person> {
@Override
public Person process(Person arg0) throws Exception {
System.out.println("In PersonProcessor");
return arg0;
}
}
是不是有人带着同样的错误来到这里,但是使用FlatFileItemReader
(什么是Reader
实现),看看你是否有一个以上的步骤
同名。
我的Spring批处理项目有两个同名步骤。这两个步骤中的最后一步导致了无限循环。
添加一个标志以阻止读卡器在无限循环中运行。
读者:
public class PersonReader implements ItemReader<Person> {
private boolean batchJobState = false;
@Override
public Person read() throws Exception, UnexpectedInputException, ParseException, NonTransientResourceException {
if(!batchJobState){
Person person = new Person();
System.out.println("In PersonReader");
batchJobState=true;
return person;
}
return null;
}
}
将运行一个步骤,直到ItemReader
返回null。在你的例子中,你的ItemReader
永远不会这样做(它总是返回一个新的Person
),所以它永远不会结束。
在产品发布的最后一分钟,我发现Java Spring批处理有一个奇怪的问题。它进入无限循环。 这是我的配置: 记录总数为10条。因此,提交是在处理每一条记录之后进行的。我正在将结果写入Writer中的数据库。 我从阅读器中一个接一个地获取项目,处理并写入数据库。 它一直在运行,并将数据无限地插入表中。 观察结果是:提交间隔 如果有人提出一些解决方案/解决方法,在因为这个问题而举行生产发布时,这将对
我的spring批处理应用程序运行在连接到MySQL数据库(单实例)的PCF平台上,只有一个实例启动时运行良好
我正在使用spring批处理读取CSV文件并使用controller触发器将其写入DB。在启动应用程序时,在我从浏览器url中点击之前,我会在启动时看到来自阅读器的打印语句。虽然它不为我的处理器或写入器打印它,它们是在单独的类中,我已经自动连线。是因为读者是豆子吗?
我有以下工作要处理在一定的时间间隔或特别的基础上。 作业中的步骤如下: 我也想要用户界面,在那里我可以触发一个特别的基础上的工作,而且我应该能够提供参数从用户界面。 我想用Spring batch来完成这个任务,但它更多的是用于读->处理->写之类的工作。这里,在第一步中,我正在生成由第二步读取的数据。我不确定我是否还可以使用Spring batch来实现这个,或者有更好的方法来实现这个。
我恶意地做了一个代码来检查批处理流是如何工作的。 这里是步骤和任务。 以上代码结果1- 我的想法:第一步没有失败,所以开始(1)- 但是,当我像这样修改了两个数字时(在from(step1)之后,只修改了Step2和Step3的代码),结果只有1- 自己的许多实验都与“开始”之后的“to”有关。 我不知道为什么会这样。 这有什么区别?
问题内容: 运行main方法时,将执行作业。这样我无法弄清楚如何控制作业的执行。例如,您如何安排作业,访问作业执行或设置作业参数的方式。 我试图注册自己的JobLauncher 但是当我尝试在主要方法中使用它时: 当加载上下文时,该作业再次执行,而当我尝试手动运行它时,我得到了。有没有办法防止自动作业执行? 问题答案: 通过设置可以防止作业执行 在application.properties中。或