我的应用程序中有一个非常奇怪的错误。我面临的问题是,如果我在 ServiceMix 中运行我的应用程序,来自 SimpleJdbcCall 的结果集总是包含来自先前存储过程调用的所有先前值。
但是,在本地运行时仅存储最后一个值。
我的骆驼路线(使用假名):
<from ref="cronQuartzEndpoint"/>
<to uri="bean:userDAO?method=listAll"/>
<split>
<simple>${body}</simple>
<to uri="bean:myStoredProcCaller?method=requestAndStoreUserName" />
<to uri="bean:userDAO?method=saveUser" />
</split>
让我们看看存储过程调用者逻辑。假设存储过程返回用户名,并等待 id 作为参数。
public User requestAndStoreUserName(User user) {
LOG.info("userId: " + user.getId());
//I know it's not necessary but I added it to ensure that new RowMapper is generated
mySimpleJdbcCall.returningResultSet(USER_NAME_FIELD, new UserNameRowMapper());
mySimpleJdbcCall.compile();
Map<String, Object> results = mySimpleJdbcCall.execute(user.getId());
List<String> userNames = (List<String>)results.get(USER_NAME_FIELD);
LOG.info("userNames: " + userNames );
if ( !userNames .isEmpty() ) {
user.setName(userNames.get(0));
}
return user;
}
我的 RowMapper 很简单:
private static class UserNameRowMapper implements RowMapper<String> {
@Override
public String mapRow(ResultSet rs, int rowNum) throws SQLException {
return rs.getString(USER_NAME_RESPONSE_FIELD_INDEX);
}
};
如果我在本地运行我的骆驼路线的日志:
- 用户ID:1
- 用户名:[爱丽丝]
- 用户ID:2
- 用户名:[鲍勃]
如果在 ServiceMix 中运行它的日志:
- 用户ID:1
- 用户名:[爱丽丝]
- 用户ID:2
- 用户名:[爱丽丝,鲍勃]
双方使用的工件版本和所有配置都相同。任何想法这个问题背后的逻辑是什么?谢谢,格格利