小编Aur*_*rea的帖子

如何避免PMD CloseResource违规?

我正在修改我的应用程序代码以尊重pmd规则.我在此代码中有一个关闭资源错误:

Connection c = DataSourceUtils.getConnection(dataSource);
Statement request = null;
try {
    request = c.createStatement();
    request.execute(loadDataRequest);
} catch (SQLException e) {
    dataLogger.error(e);
    throw e;
}
Run Code Online (Sandbox Code Playgroud)

所以我搜索并找到了一个apache实用程序来避免它:DButils我的代码变成了这样

Connection c = DataSourceUtils.getConnection(dataSource);
Statement request = null;
try {
    request = c.createStatement();
    request.execute(loadDataRequest);
} catch (SQLException e) {
    dataLogger.error(e);
    throw e;
} finally {
    DbUtils.closeQuietly(request);
    DbUtils.closeQuietly(c);            
}
Run Code Online (Sandbox Code Playgroud)

但是,我仍然在日食和声纳报告中获得PMD警报!你知道如何永久修复它吗?

pmd

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

Spring Integration - 在Service Activator组件中出现Exception时写入错误队列

我开始使用Spring集成,如果可能,我不知道如何解决这种情况.

我想自动"捕获"每个可能发生在我的应用程序的服务激活器中的异常,并将此错误发送到专用队列.网关不是一个解决方案,因为我需要一些自定义代码,所以如果我正确理解了原理,我必须使用服务激活元素.

我觉得那样的事情还可以:

<jms:outbound-channel-adapter channel="errorChannel"
                                  connection-factory="jmsConnectionFactory" destination="oneErrorQueue"/>
Run Code Online (Sandbox Code Playgroud)

那不行.我不知道Spring集成是否使用了errorChannel来确定错误.


谢谢,它似乎工作.

我让变换器监听入站组件的错误通道启动流,并在服务激活器中发生错误时获取MessagingException.现在问题是这个错误没有到达我的队列.我让你看看代码:

<jms:message-driven-channel-adapter
            channel="input-channel" concurrent-consumers="1"
            max-concurrent-consumers="3" connection-factory="jmsConnectionFactory"
            transaction-manager="jtaTransactionManager" destination="myQueue" error-channel="myErrorChannel"/>

<transformer input-channel="myErrorChannel" output-channel="create-error-channel" ref="errorTransporter" method="transform"/>

    <jms:outbound-channel-adapter channel="create-error-channel"
                                  connection-factory="jmsConnectionFactory" destination="creationErrorQueue" extract-payload="true"/>

...
Run Code Online (Sandbox Code Playgroud)

和变压器:

public class ErrorTransporter {

    @Transformer
    public Message<CreateCustomerOrder> transform(MessagingException exception) {
        return (Message<CreateCustomerOrder>) exception.getFailedMessage();
    }
}
Run Code Online (Sandbox Code Playgroud)

在此先感谢您的帮助!

error-handling routing exception-handling spring-integration

3
推荐指数
1
解决办法
6377
查看次数