小编use*_*878的帖子

Spring批处理+ JPA Persistance异常处理

我正在使用Spring批处理应用程序,该应用程序使用JPA Persistence写入数据库.我有一个场景,我必须在写入期间跳过异常,并且作业必须继续而不会失败.

假设我有10条记录要写,而记录6会抛出一个SQL异常(表或视图不存在.)我需要跳过这条记录并继续下一条记录.

我尝试实现skippable-exception-classes但是无法跳过异常并且作业失败.该作业在持久性操作期间抛出SQL异常(不在write()方法中抛出异常).

'skippable-exception-classes'是否真的适用于JPA层中发生的任何异常?例如,如果在JPA提交期间发生了一些异常,是否真的可以使用'skippable-exception-classes'处理异常并阻止作业回滚所有提交到目前为止?请帮忙!

 <batch:job id="advDataExtJob" job-repository="jobRepository"
    incrementer="myIncrementerImpl" restartable="false">
    <batch:step id="myStep">
        <batch:tasklet transaction-manager="transactionManager"             
            task-executor="taskExecutor"  allow-start-if-complete="true">
            <batch:chunk reader="myReader" processor="myProcessor"
                writer="MyWriter" commit-interval="1000" skip-limit="10">

                <batch:skip-policy>
                    <bean class="org.springframework.batch.core.step.skip.AlwaysSkipItemSkipPolicy" scope="step"/>
                </batch:skip-policy>

                <batch:skippable-exception-classes>
                    <batch:include class="java.lang.Throwable"/>
                </batch:skippable-exception-classes>
            </batch:chunk>
            <batch:listeners>
                <batch:listener ref="StepListener"/>
                <batch:listener ref="advExtStepListener"/>
                <batch:listener ref="ItemWriteListener"/>
                <batch:listener ref="ItemSkipListener"/>
            </batch:listeners>                  
        </batch:tasklet>
    </batch:step>
    <batch:validator ref="dataExtJobValidator"/>
    <batch:listeners>
                <batch:listener ref="dataExtJobListener"/>
                <batch:listener ref="advExtJobListener"/>
    </batch:listeners>
</batch:job>
Run Code Online (Sandbox Code Playgroud)

跳过监听器如下

项目跳过监听器如下

@Override
    public void onSkipInRead(Throwable t) {
        System.out.println("skipped item: {} " + t.toString());
    }

    @Override
    public void onSkipInWrite(Object item, Throwable t) { …
Run Code Online (Sandbox Code Playgroud)

java jpa exception-handling spring-batch

5
推荐指数
0
解决办法
683
查看次数

读取而不从 JMS 队列中删除消息

如何从WebSphere MQ读取消息而不从队列中删除原始消息?

我有一个 Spring 应用程序,它从 WebSphere MQ 读取消息。阅读后,我有一个处理方法,它将处理从队列中检索的数据。

步骤1:

response = jmsTemplate.receive();
//Message automatically removed from queue.
Run Code Online (Sandbox Code Playgroud)

第2步:

process(response);
Run Code Online (Sandbox Code Playgroud)

process 方法中有可能抛出异常。如果出现异常,我需要将消息保留在队列中。

是否可以?他们有办法仅在用户确认后删除该消息吗?

我尝试添加以下内容:

jmsTemplate.setSessionAcknowledgeMode(javax.jms.Session.CLIENT_ACKNOWLEDGE);
Run Code Online (Sandbox Code Playgroud)

...但该消息仍然被删除。

JmsTemplate创建代码片段:

JndiConnectionFactorySupport connectionFactoryBean = new JndiConnectionFactorySupport();
    connectionFactoryBean.setBindingsDir(this.bindingDir);


        connectionFactoryBean
                .setConnectionFactoryName(connectionFactoryName);
        connectionFactoryBean.afterPropertiesSet();
        jmsTemplate.setConnectionFactory(connectionFactoryBean.getObject());


    JndiDestinationResolver destinationResolver = new JndiDestinationResolver();
    destinationResolver.setJndiTemplate(connectionFactoryBean
            .getJndiTemplate());

    jmsTemplate.setDestinationResolver(destinationResolver);
    jmsTemplate.setReceiveTimeout(20000);
    jmsTemplate.setDefaultDestinationName(this.defaultDestinationName);

            
Run Code Online (Sandbox Code Playgroud)

尝试了jmsTemplate.execute()如下方法:

@SuppressWarnings({ "unused", "unchecked" })
        Message responseMessage = (Message) jmsTemplate.execute(
            new SessionCallback() { 
                public Object doInJms(Session session)
                        throws JMSException {
                    MessageConsumer consumer = session
                    .createConsumer(jmsTemplate.getDestinationResolver().resolveDestinationName(session, "QUEUE_NAME", false));
                    Message response = consumer.receive(1); …
Run Code Online (Sandbox Code Playgroud)

java spring message-queue spring-jms

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