Java ExpressionEvaluationRequestHandlerAdvice Spring集成
我正在使用SpringIntegration4.3版本开发sftp出站适配器 我能够成功地将文件发送到sftp位置,但我想将数据库记录更新为完成状态 我正在ExpressionEvaluationRequestHandlerAdvice中寻找一个选项,但无法找到如何从setOnSuccessExpressionString调用方法 尝试以下选项Java ExpressionEvaluationRequestHandlerAdvice Spring集成,java,spring,spring-integration,Java,Spring,Spring Integration,我正在使用SpringIntegration4.3版本开发sftp出站适配器 我能够成功地将文件发送到sftp位置,但我想将数据库记录更新为完成状态 我正在ExpressionEvaluationRequestHandlerAdvice中寻找一个选项,但无法找到如何从setOnSuccessExpressionString调用方法 尝试以下选项 @Bean public ExpressionEvaluatingRequestHandlerAdvice afterPut() { Exp
@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();
}
}
您需要向Spring集成评估上下文工厂注册函数 要通过Java配置提供SpEL函数,您应该为每个函数声明一个SpelFunctionFactoryBean。上述示例可按如下方式配置:
谢谢你,加里。。。我做到了,现在效果很好:)
@Bean
public SpelFunctionFactoryBean xpath() {
return new SpelFunctionFactoryBean(XPathUtils.class, "evaluate");
}