【发布时间】:2020-03-19 21:57:05
【问题描述】:
我想在缓存和驱逐数据时从 java 常量文件中读取 memcached 键。我不想从属性文件中读取,只是从常量文件中读取。
例如在缓存数据时:
BookConstant.java
public class BookConstant
{
public static final String CACHE_BY_BOOK_ID = "book_id";
}
BookServiceImpl.java
@Override
@Cacheable(cacheNames = BookConstant.CACHE_NAME, key = "#BookConstant.CACHE_BY_BOOK_ID + '_' + #id")
public Book getById(Long id)
{
Optional<Book> book = bookRepository.findById(id);
return book.orElse(null);
}
我的目的是生成密钥:
book_id_1234
在驱逐数据时:
@Override
public Book updateBook(Book book)
{
book.setModifiedDate(new Date());
Book newBook = bookRepository.save(book);
bookSearchService.insertBookIndex(newBook);
memcachedClient.evict(BookConstant.CACHE_BY_BOOK_ID + "_" + book.getId());
return newBook;
}
所以它在缓存数据时抛出错误:
SpelEvaluationException: EL1007E: 在 null 上找不到属性或字段“CACHE_BY_BOOK_ID”
因为它尝试从属性文件中读取密钥。
我不确定是否可以动态地从常量文件中读取密钥,但这就是问题所在。如果可能的话,你能帮帮我吗?谢谢。
【问题讨论】:
标签: java spring spring-boot caching memcached