我正在为我的get方法运行guava缓存。我注意到我的一个方法,它根据名称和部门从数据库中检索配置文件信息,仅从缓存中返回。如果条目不在缓存中,则应该转到DAO以从数据库中检索该配置文件。就我而言,它只是返回它放在缓存中的最后一个条目。
以下是我的缓存代码和使用它的管理器层方法:
private LoadingCache<Profile, List<Profile>> loadingCache = CacheBuilder.newBuilder()
.refreshAfterWrite(5, TimeUnit.MINUTES)
.expireAfterAccess(5, TimeUnit.MINUTES)
.maximumSize(100).build(
new CacheLoader<Profile, List<Profile>>() {
@Override
public List<Profile> load(Profile profile) throws Exception {
System.out.println("Profile Parameters in LoadCache= " + profile);
return profileDAO.getProfileByFields(profile);
}
}
);
public List<Profile> getProfileByFields(Profile profile) throws Exception {
System.out.println("Profile Parameters in method= " + profile);
return loadingCache.get(profile);
}
这种方法的工作方式是在服务层上,使用路径参数中的配置文件名称和部门调用get方法:
@GET
@Path("{name}/{department}")
public List<Profile> getProfileByFieldsService(@PathParam("name") String name, @PathParam("department") String department) {
Profile profile = new Profile();
profile.setName(name);
profile.setDepartment(department);
//code to get data here.
}
这些参数传递给管理器,管理器应从缓存或DAO加载。我知道DAO服务的代码在没有缓存的情况下正常工作;正如预期的那样,用DAO替换return loadingCache.get(profile)
return profileDAO.getProfileByFields(profile)
次加载。此外,当我缩短缓存的到期时间(例如,到5毫秒)时,它会在到期后从DAO加载。此外,getProfileByFields中的System.out运行,显示参数传递给配置文件对象。但是,loadingCache中的System out不会运行,向我显示它永远不会到达。