我正在使用Camel sql组件,并希望在事务失败时使用onConsumeFailed更新带有异常堆栈跟踪的记录。
表格结构:CREATE TABLE IF NOT EXISTS库存(项目编号整数NOT NULL DEFAULT nextval('inventory_itemnbr_seq'::regclass),位置整数,位置类型字符变化(2),颜色字符变化(5),品牌字符变化(5),soh双精度,camel_is_read整数DEFAULT 0,例外字符变化(500),CONSTRAINT inventory_pkey PRIMARY KEY(项目编号))
在我的camel路径中,我使用了如下onConsumeFailed选项
sql://<select statement>?dataSource=#dataSource&onConsumeFailed=update inventory set camel_is_read = 0, exception=:#exception where itemNbr= :#itemNbr
我已经在路由上创建了onException,如下所示,并将头属性“exception”的根本原因设置为。
onException(Exception.class).process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
Throwable ex = exchange.getProperty(Exchange.EXCEPTION_CAUGHT,
Throwable.class);
exchange.getIn().setHeader("exception", ex.getCause());
}
});
当事务发生异常时,更新行时将引发以下错误
org.apache.camel.RuntimeExchangeException:Cannot find key [exception] in message body or headers to use when setting named parameter in query
在路由执行过程中,如何从路由访问头属性?
1条答案
按热度按时间piwo6bdm1#
您可以使用简单的表达式语言来获取异常
异常=:#${异常}
https://camel.apache.org/components/next/languages/simple-language.html