有一个用@Cacheable注释的方法返回一个对象:
@Service
public class UserService {
@Cacheable("userData")
public UserData getUserData(String userName) {
UserData userData = new UserData();
userData.setGotFromCache(false);
return userData;
}
}
和UserData对象:
@Getter
@Setter
public class UserData {
private boolean gotFromCache;
}
如何检测是否调用了带注释的@Cacheable方法,或者其输出是否来自缓存?
解决方法是注入CacheManager并手动检测:
Cache cache = this.cacheManager.getCache("userData");
UserData userData = null;
String userName = "some user name";
if (cache != null) {
Object key = SimpleKeyGenerator.generateKey(userName);
userData = cache.get(key, UserData.class);
if (userData != null) {
userData.setGotFromCache(true);
} else {
userData = userService.getUserData(userName);
cache.put(key, userData);
}
} else {
userData = userService.getUserData(userName);
}
然而,为了简单起见,这段代码没有使用@Cacheable注释。
是否可以使用@Cacheable并检测输出是否来自缓存?
您可以更改用户数据,看看返回的值是旧值还是新值
取决于您需要检测的时间——在部署应用程序的运行时,还是在开发期间。
无论哪种方式,基本思想都是一样的:必须有一个底层数据源,比如数据库(UserRepository?)或者API调用或者其他什么。
在运行时,您可以通过日志记录或跟踪(例如使用Zipkin)检查是否调用了数据源。
--或--
在开发过程中,您可以为模拟数据源的UserService
编写单元测试,并验证是否与模拟对象存在“零交互”,表明数据实际上是从缓存中获取的。
好吧,所以我正在做这个项目,你必须做一些来自用户的输入 让我们说如果他进入 "12 3" 但他没有输入第二个输入 如果我把它叫做 如果我打电话 我有错误。我如何检查是否没有第二次输入? 公共静态void main(String [] args)引发IOException{ 如果用户输入 "3 2" 但没有进入第二个...我得到nullpointerx0016
问题内容: 我正在为OS X和Linux编写一个C程序,并且我想根据是否将其输出到终端来调整输出。我知道我们已经在Shell脚本中介绍了如何执行此操作 但是,如何在C程序中执行此操作? 问题答案: 用途: 由于始终是文件描述符1,因此您可以执行以下操作:
问题内容: 我想知道,您可以在现有缓存中调用的方法吗?还是在性能关键代码中最好将其存储在本地int中? 当您在调用之间不添加/删除项目时,我希望它确实已缓存。 我对吗? 更新 我不是在谈论内联或类似的东西。我只想知道方法本身是否在内部缓存值,或者每次调用时它都会动态计算。 问题答案: 我想我不会说它是“缓存的”-但是它只是存储在一个字段中,因此它足够快以经常调用。 Sun JDK的实现只是:
本文向大家介绍PHP+Ajax实时自动检测是否联网的方法,包括了PHP+Ajax实时自动检测是否联网的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP+Ajax实时自动检测是否联网的方法。分享给大家供大家参考。具体实现方法如下: html部分代码: php部分代码: 希望本文所述对大家的php程序设计有所帮助。
我正在和一个班合作。我正在使用一些方法。 我需要检查我需要传递的参数,来调用这个方法。我就是这样做的 它工作得很好,但我知道有些方法有重载(没有参数),但这段代码只显示最后声明的方法(有参数要调用)。我怎样才能同时得到这两个重载? 这就是它的样子(我知道这个方法有重载) 例如另一个类:类扫描比打印方法方法 要扫描的代码 类的构造函数,它扫描给定的对象。 这就是我打印它们的方式。
问题内容: 我正在尝试将长度不定的多个数据列表输出到CSV文件。每个列表应该是输出CSV文件中的一列。有直接的做事方法吗?如果我将每个列表输出为一行,那么我将遍历每个列表并在结束时输出返回值,但是这种方法在按列工作时不起作用。 我曾想过一次逐项检查所有列表并增加一个计数器,但这也会失败,因为有些列表比另一些更长。为了解决这个问题,我将不得不在每次迭代时检查计数器是否在每个列表的末尾,这在计算方