小编poj*_*guy的帖子

Spring Batch的JobParameters

我试图将作业参数注入自定义ItemReader.我已经回顾了有关该主题的所有StackOverflow说明(例如:如何从Spring Batch中的ItemReader访问作业参数?),我发现这是一个常见的难点,大部分都没有解决.我希望春天的大师(@Michael Minella任何人)会看到这一点,并有一些见解.

即使没有代码或配置更改,我已经确定了大约十分之一的运行参数可用.这是随机成功而非随机失败的情况,因此很难追查.

我使用调试器挖掘了spring代码,并确定当失败时,在注入发生时没有在Spring中注册名为jobParameters的bean.

我使用Spring 4.1.4和spring-batch 3.0.2以及spring-data-jpa 1.7.1和spring-data-commons 1.9.1,在java 8中运行.

Java类

@Component("sourceSelectionReader")
@Scope("step")
public class SourceSelectionReaderImpl  
implements ItemReader<MyThing> {
    private Map<String,Object> jobParameters;

// ... snip ...


    @Autowired
    @Lazy
    @Qualifier(value="#{jobParameters}")
    public void setJobParameters(Map<String, Object> jobParameters) {
        this.jobParameters = jobParameters;
    }
}
Run Code Online (Sandbox Code Playgroud)

工作启动参数:

launch-context.xml job1 jobid(long)=1
Run Code Online (Sandbox Code Playgroud)

launch-context.xml(减去绒毛):

<context:property-placeholder location="classpath:batch.properties" />

<context:component-scan base-package="com.maxis.maximo.ilm" />

<jdbc:initialize-database data-source="myDataSource"  enabled="false">
    <jdbc:script location="${batch.schema.script}" />
</jdbc:initialize-database>

<batch:job-repository id="jobRepository" 
    data-source="myDataSource"
    transaction-manager="transactionManager"
    isolation-level-for-create="DEFAULT"
    max-varchar-length="1000"/>

<import resource="classpath:/META-INF/spring/module-context.xml" />
Run Code Online (Sandbox Code Playgroud)

Module-context.xml(减去绒毛):

<description>Example job to get you started. It …
Run Code Online (Sandbox Code Playgroud)

java spring spring-batch

5
推荐指数
1
解决办法
2万
查看次数

ActiveMQ / JMS“丢失”消息 - 我错过了什么?

我缺少什么?

AMQ 版本 5.13.2 Java 1.8.0_74 Windows 10

给定一个简单的测试用例,传输两个对象消息,一个包含数据,另一个是数据结束标记。仅接收数据结束标记。

队列在作业开始时创建,并在作业完成后销毁。

如果我运行大量交易,我会看到大约 50% 的接收率。

日志清楚地显示接收器在第一条消息放入队列之前启动,两条消息都被放入队列,但实际上只接收第二条消息。

发送方和接收方都位于同一个 JVM 上。每个都有自己的会话和连接。

连接和队列设置代码:

@Override
public void beforeJob(JobExecution jobExecution) {
    // TODO Auto-generated method stub
    try {
        jobParameters = jobExecution.getJobParameters();

        readerConnection = connectionFactory.createConnection();
        readerConnection.start();

        writerConnection = connectionFactory.createConnection();
        writerConnection.start();

        jmsQueueManagementSession = writerConnection.createSession(false, Session.AUTO_ACKNOWLEDGE);

        queueName = jobParameters.getString("jobName") + "." + jobExecution.getId();

        queue = jmsQueueManagementSession.createQueue(getQueueName());

    } catch (JMSException ex) {
        throw new MaxisRuntimeException(
                MaxisCodeHelperImpl.generateCode("MXAR", MXMODULE, JMS_RECEIVER_INITIALIZATION_ERROR), null);
    }

}
Run Code Online (Sandbox Code Playgroud)

发送者设置代码:

@Override
public void beforeStep(StepExecution stepExecution) {

    this.stepExecution = stepExecution; …
Run Code Online (Sandbox Code Playgroud)

java activemq-classic jms spring-batch

2
推荐指数
1
解决办法
4388
查看次数

标签 统计

java ×2

spring-batch ×2

activemq-classic ×1

jms ×1

spring ×1