首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >弹簧批处理JmsItemReader不能正常工作

弹簧批处理JmsItemReader不能正常工作
EN

Stack Overflow用户
提问于 2018-12-23 11:44:15
回答 1查看 604关注 0票数 0

我有一个使用Spring和с自定义ItemWriter的简单程序。程序的目的是读取ActiveMQ队列。我已经将提交间隔设置为25,但它不起作用。我将以随机的间隔向我的项目撰稿人索取物品。我花了一整天的时间来解决这个问题,但我没能解决。请帮帮我。这是我的职务配置:

代码语言:javascript
复制
<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:

代码语言:javascript
复制
<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:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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 喷壶(id=0,userName=UserName0,password=pasword0,fullName=User User0,email=qwer@qwer.com0) 喷壶(id=0,userName=UserName572,password=pasword572,fullName=User User572,email=qwer@qwer.com572) 喷壶(id=0,userName=UserName773,password=pasword773,fullName=User User773,email=qwer@qwer.com773) SimpleJobLauncher:136 -作业:[FlowJob: name=reportJob]已完成,参数如下:{launchTime=1545564286588}和以下状态:已完成

EN

回答 1

Stack Overflow用户

发布于 2019-01-02 15:24:33

我不明白为什么和为什么阅读项目的数量可以是随机的。不过,有几个注意事项:

  • 在jms模板上设置sessionTransacted。你把readerIsTransactionalQueue也设置在JmsItemReader上了吗?
  • 您使用的是默认使用MapJobRepositoryFactoryBeanResourcelessTransactionManager。这意味着当您的(事务处理) jms会话正在运行时,没有正在进行的事务。您是否尝试过在jms模板上设置sessionAcknowledgeMode = Session.SESSION_TRANSACTED
  • 您正在使用事务性jms会话,但我没有看到在您的步骤中使用JmsTransactionManager。这是故意的吗?
  • 与前两点相关的是,使用带有非事务性作业存储库的事务性jms会话对我来说没有任何意义。要么禁用jms模板上的sessionTransacted,要么使用事务性作业存储库(在这种情况下,需要一个JtaTransactionManager来同步两个事务管理器: jms和数据库)

如果这些提示没有帮助,请共享一个项目与所有的代码和依赖的Github (或其他地方),以便能够重现问题,并帮助您。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53903333

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档