Spring Integration Jdbc StoredProcMessageHandler漂亮日志过程请求和响应.



尝试在CallMetaDataContext中启用DEBUG,但是需要找到一种方法来漂亮地打印存储过程INOUT参数的值。请建议

另外,如果我们使用.handle("someBean", "someMethodUsingJdbcTemplate")而不是StoredProcMessageHandler,会被认为是OK/可接受的吗?原因是前者可以帮助我使用JdbcTemplate

进行漂亮的日志记录。Pretty Logging using JdbcTemplate:

@PostConstruct
public void init() {
// @formatter:off
simpleJdbcCall = new SimpleJdbcCall(jdbcTemplate).withProcedureName(STORED_PROC)
.withoutProcedureColumnMetaDataAccess() // this is optional
.returningResultSet("REF_CURSOR_NAME_FROM_STORED_PROC", null); // this is optional
// @formatter:on
simpleJdbcCall.addDeclaredParameter(new SqlParameter("IN_PARAM_1", Types.VARCHAR));
simpleJdbcCall.addDeclaredParameter(new SqlParameter("IN_PARAM_2", Types.VARCHAR));
}
private Map<String, Object> constructCallParams(final Object dtoObject) {
Map<String, Object> callParams = new LinkedHashMap<>();
callParams.put("IN_PARAM_1", dtoObject.field1());
callParams.put("IN_PARAM_2", dtoObject.field2());
return callParams;
}
public Mono<Void> fetch(final String request) {
Map<String, Object> callParams = constructCallParams(null);
// @formatter:off
return Mono.fromCallable(() -> simpleJdbcCall.execute(callParams))
.subscribeOn(Schedulers.boundedElastic())
.doOnError(ex -> log.error("{} InParams: {}, Exception: {}", STORED_PROC, callParams, ex.getMessage()))
.onErrorMap(ApplicationException::new) // optional
.flatMap(outParams -> {
log.info("{} InParams: {}, OutParams: {}", STORED_PROC, callParams, outParams);
return Mono.empty();
});
// @formatter:on
}

是的,您可以为任何自定义方法调用使用handle()——服务激活器模式。StoredProcMessageHandler只是一个开箱即用的服务激活器实现用例。请与我们分享一下您是如何使用JdbcTemplate进行漂亮的日志记录的。可能像public StoredProcExecutor(JdbcTemplate jdbcTemplate) {这样的东西可以让您保留漂亮的日志记录,并且仍然使用StoredProcMessageHandler。请随意提出关于这个新构造函数的GH问题!

最新更新