我正在使用Spring Integration 4.3版本开发sftp出站适配器。
我能够成功将文件发送到sftp位置,但我想更新数据库记录以完成状态。
我正在寻找一个选项的ExpressionEvaluatingRequestHandlerAdvice,但是无法弄清楚如何从setOnSuccessExpressionString调用一个方法。
尝试以下选项。
@Bean
public ExpressionEvaluatingRequestHandlerAdvice afterPut() {
ExpressionEvaluatingRequestHandlerAdvice advice = new ExpressionEvaluatingRequestHandlerAdvice();
StandardEvaluationContext context = new StandardEvaluationContext();
///context.setBeanResolver((BeanResolver) new SftpPutBean());
ExpressionParser parser = new SpelExpressionParser();
try {
context.registerFunction("mymethod", SftpPutBean.class.getDeclaredMethod("mymethod", new Class[] { String.class }));
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
}
//String abc
String helloWorldReversed = parser.parseExpression("#mymethod(headers['transmissionId'])").getValue(advice, String.class);
advice.setOnSuccessExpressionString("helloWorldReversed");
advice.setPropagateEvaluationFailures(true);
return advice;
}
public void mymethod(String id) {
try {
TransmissionQueue abc = transmissionQueueDataService.findById(Integer.parseInt(id));
abc.setStatus("COMPLETED");
transmissionQueueDataService.saveTransmissionQueue(abc);
} catch (Exception e) {
e.printStackTrace();
}
}
答案 0 :(得分:0)
您需要使用Spring Integration评估上下文工厂注册您的函数。 Instructions here
要通过Java Configuration提供SpEL功能,您应该为每个函数声明一个SpelFunctionFactoryBean bean。上面的示例可以配置如下:
@Bean
public SpelFunctionFactoryBean xpath() {
return new SpelFunctionFactoryBean(XPathUtils.class, "evaluate");
}