我正在开发一个Web服务系统。我使用的是Spring框架和hecache。 问题是,当我第一次向URL请求时,我得到了正确的结果,但是当我用另一个参数做第二个请求时,它仍然返回与第一个请求相同的结果。当缓存过期时,它会在第一次返回正确的结果。
这是我的Spring Service方法
@Cacheable(value="getUserInformation", key="#progid")
public Object getUserInformation(String login, String progid, HttpServletRequest request){
System.out.println( login.concat(progid) );
try {
SimpleJdbcCall simpleJdbcCall = new SimpleJdbcCall(jdbcTemplate).
withCatalogName("siv_pck_general_functions").
withFunctionName("fn_get_user_information");
SqlParameterSource out = new MapSqlParameterSource().addValue("p_loginname", login).addValue("p_programid", progid);
map.put("Result", simpleJdbcCall.executeFunction(List.class, out) );
logger.info( LogUtils.getTypeMessage(request.getRemoteAddr(), request.getRequestURI(), LogUtils.INFO ));
} catch (Exception e) {
map.put("Result","Error");
}
return map;
}
这是我的ecache配置
<cache name="getUserInformation"
maxEntriesLocalHeap="10000"
maxEntriesLocalDisk="1000"
eternal="false"
diskSpoolBufferSizeMB="20"
timeToIdleSeconds="300"
timeToLiveSeconds="600"
memoryStoreEvictionPolicy="LFU"
transactionalMode="off">
<persistence strategy="localTempSwap" />
</cache>
这是我的Web服务映射
@RequestMapping( value="/getUserInformation/{loginName}/{programId}/{token}", method = RequestMethod.GET, produces="application/json;charset=UTF-8" )
public Object getUserInformation( @PathVariable String loginName, @PathVariable String programId, @PathVariable String token,HttpServletRequest request){
httpServletRequest = request;
String result = validateToken(token);
if ( "OK".equals(result) ){
map.put("Result", service.getUserInformation(loginName, programId, request) );
}else{
map.put("Result",result);
}
return map;
}