我在服务中使用基于注释的Spring Cache抽象。
我想在添加到缓存时为密钥添加自定义前缀。
我创建了一个常量并尝试将它们添加到以下方法中。
Latin1_General_CI_AS_KS_WS
但是,我得到如下的堆栈跟踪。
private static final String CACHE_KEY_PREFIX="user";
@Cacheable(value = "users", key = "{ CACHE_KEY_PREFIX,#userId }")
@GetMapping("/{userId}")
public User getUser(@PathVariable String userId) {
LOG.info("Getting user with ID {}.", userId);
return userRepository.findOne(Long.valueOf(userId));
}
@CacheEvict(value = "users",key="{ CACHE_KEY_PREFIX,#userId }" )
@DeleteMapping
public void deleteUserByID(@PathVariable Long userId) {
LOG.info("deleting person with id {}", userId);
userRepository.delete(userId);
}
由于我有多种方法,所以我不想在每个方法注释中对自定义前缀进行硬编码。
有没有办法添加自定义前缀并避免我看到的异常。
答案 0 :(得分:1)
要在注释中使用常量,可以将其包含为固定字符串,如下所示:
@Cacheable(value = "users", key = "{'" + CACHE_KEY_PREFIX + "', #userId}")
@GetMapping("/{userId}")
public User getUser(@PathVariable String userId) {
LOG.info("Getting user with ID {}.", userId);
return userRepository.findOne(Long.valueOf(userId));
}
在这种情况下,编译器会将属性key
的值解析为{'user', #userId}
。