У меня есть простая программа, работающая с Spring Batch JmsItemReader и пользовательским ItemWriter.Целью программы является чтение очереди ActiveMQ.Я установил интервал коммита 25, но он не работает.Я получаю предметы через случайные промежутки времени своему автору.Я провел целый день, пытаясь решить эту проблему, но я не могу пройти.Пожалуйста, помогите мне.Это моя конфигурация задания:
<batch:job id="reportJob">
<batch:step id="step1">
<batch:tasklet>
<batch:chunk reader="jmsItemReader"
writer="customItemWriter"
commit-interval="25">
</batch:chunk>
</batch:tasklet>
</batch:step>
</batch:job>
<bean id="jmsItemReader"
class="org.springframework.batch.item.jms.JmsItemReader">
<property name="itemType" value="com.example.Entities.Spitter"/>
<property name="jmsTemplate" ref="jmsTemplate"/>
</bean>
<bean id="customItemWriter" class="com.example.batch.CustomItemWriter"/>
<bean id="jobRepository"
class="org.springframework.batch.core.repository.support.MapJobRepositoryFactoryBean">
</bean>
<bean id="jobLauncher"
class="org.springframework.batch.core.launch.support.SimpleJobLauncher">
<property name="jobRepository" ref="jobRepository" />
</bean>
<bean id="schedulingLauncher" class="com.example.batch.SchedulingLauncher">
<property name="job" ref="reportJob"/>
<property name="jobLauncher" ref="jobLauncher"/>
</bean>
<task:scheduler id="scheduler" />
<task:scheduled-tasks scheduler="scheduler">
<task:scheduled ref="schedulingLauncher"
method="launch"
fixed-delay="10000" />
</task:scheduled-tasks>
JMS-бины:
<bean id="connectionFactory" class="org.apache.activemq.spring.ActiveMQConnectionFactory">
<property name="brokerURL" value="tcp://localhost:61616" />
<property name="userName" value="admin"/>
<property name="password" value="admin"/>
</bean>
<bean id="queue" class="org.apache.activemq.command.ActiveMQQueue">
<constructor-arg value="JpaQueue"/>
</bean>
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory" ref="connectionFactory"/>
<property name="defaultDestination" ref="queue"/>
<property name="receiveTimeout" value="500"/>
<property name="sessionTransacted" value="true" />
</bean>
Мой ItemWriter:
public class CustomItemWriter implements ItemWriter<Object> {
public void write(List<?> items) throws Exception {
System.out.println("List size: " + items.size());
for (Object item: items) {
System.out.println(item);
}
}
}
И ShedulingLauncher:
public class SchedulingLauncher {
private Job job;
private JobLauncher jobLauncher;
public void launch() throws Exception{
JobParameters jobParams =
new JobParametersBuilder().addLong("launchTime", System.currentTimeMillis()).toJobParameters();
jobLauncher.run(job,jobParams);
}
Вывод:
SimpleJobLauncher: 133 - Задание: [FlowJob: [name = reportJob]]] запущено со следующими параметрами: [{launchTime = 1545564286588}]
Выполнение шага: [step1]
Размер списка: 3
Spitter (id = 0, userName = UserName0, пароль = pasword0, fullName = User User0, электронная почта = qwer @ qwer.com0)
Spitter (id = 0, userName = UserName572, пароль = pasword572, fullName = пользователь User572, email=qwer@qwer.com572)
Spitter (id = 0, userName = UserName773, пароль = pasword773, fullName = пользователь User773, email=qwer@qwer.com773)
SimpleJobLauncher: 136 - Задание: [FlowJob: [name = reportJob]] завершено со следующими параметрами: [{launchTime = 1545564286588}] и следующий статус: [ЗАВЕРШЕНО]