我正在尝试使用 Hibernate Reactive Panache 将我的项目迁移到 Quarkus Reactive,但我不确定如何处理缓存。
我原来的方法是这样的
@Transactional
@CacheResult(cacheName = "subject-cache")
public Subject getSubject(@CacheKey String subjectId) throws Exception {
return subjectRepository.findByIdentifier(subjectId);
}
如果可用,则通过缓存键“subjectId”从缓存中加载主题。
迁移到 Mutiny 看起来像这样
@CacheResult(cacheName = "subject-cache")
public Uni<Subject> getSubject(@CacheKey String subjectId) {
return subjectRepository.findByIdentifier(subjectId);
}
但是,将 Uni 对象存储在缓存中是不对的。
也可以选择将缓存作为 bean 注入,但是,回退函数不支持返回 Uni:
@Inject
@CacheName("subject-cache")
Cache cache;
//does not work, cache.get function requires return type Subject, not Uni<Subject>
public Uni<Subject> getSubject(String subjectId) {
return cache.get(subjectId, s -> subjectRepository.findByIdentifier(subjectId));
}
//This works, needs blocking call to repo, to return response wrapped in new Uni
public Uni<Subject> getSubject(String subjectId) {
return cache.get(subjectId, s -> subjectRepository.findByIdentifier(subjectId).await().indefinitely());
}
@CacheResult 注释可以与 Uni / Multi 一起使用并且一切都在引擎盖下正确处理吗?