我正在尝试使用Spring Cacheable,但我得到一个类强制转换异常
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = CacheableTest.class, loader = AnnotationConfigContextLoader.class)
@Configuration
@EnableCaching
public class CacheableTest {
public static final String CACHE = "cache";
@Bean
public CacheManager cacheManager() {
return new ConcurrentMapCacheManager(CACHE);
}
@Autowired
DataService service;
@Test
public void cacheTest() {
final String name = "name";
Data a = service.getData(name);
Data b = service.getData(new String(name));
Assert.assertSame(a, b);
String c = service.getValue(service.getData(name));
String d = service.getValue(service.getData(new String(name)));
Assert.assertSame(c, d);
String e = service.getValue(name);
String f = service.getValue(new String(name));
Assert.assertSame(e, f);
}
public static class Data {
private String value;
public Data(String value) {
this.value = value;
}
}
@Service
public static class DataService {
@Resource
private DataService self;
@Cacheable(CACHE)
public Data getData(String name) {
return new Data(name);
}
@Cacheable(CACHE)
public String getValue(Data data) {
return data.value;
}
@Cacheable(CACHE)
public String getValue(String name) {
return self.getData(name).value;
}
}
}
例外情况是,CacheableTest$数据不能转换为java。lang.String发生在字符串e行。我们知道为什么吗?
您已声明了两个参数相同但返回类型不同的方法:
public Data getData(String name)
public String getValue(String name)
您用相同的缓存名称将它们标记为可缓存。因此,您共享单个缓存来存储两种方法的结果。这两种方法具有完全相同的参数(字符串),因此spring为数据和值计算的缓存键将发生冲突。
调用的第一个方法将返回Spring将放入缓存的结果,第二个方法将尝试从缓存中检索相同的结果(因为缓存名称和方法参数匹配)并尝试将其转换为其他类型-因此,类转换异常。
这和你做的差不多:
Map<String, Object> cache = new HashMap<>();
cache.put("key", "value1");
int i = (Integer)cache.get("key")
我正在使用注释来缓存我的方法的结果。出于性能原因,我想缓存从方法返回的和非null值。 但是这里的问题是Spring缓存非空值,但由于某种原因没有缓存空值。 这是我的密码: 我什么都试过了。就连我 但这也没什么帮助。有关于这个的指示吗?
我试图以某种方式“调试”使用spring boot cache注释的应用程序,为此,我想知道如何找到实际实现接口Cacheable、CacheConfig等的类。 我的想法是确认缓存正在被填充、清空等。
我正在尝试实现Spring boot cacheable。我想缓存作为ws调用的方法响应。 1) 我能够根据请求实现缓存。 2) 我计划每天凌晨1点后进行缓存逐出。 这也很正常。我的问题是,在没有从浏览器向@Cacheable注释方法发出任何请求的情况下,我可以在驱逐后调用@Cacheable注释方法以确保应用程序安全吗? 这是为了应用安全。如果@Cacehable无法缓存响应,则不会影响应用程序
我在Spring3.1中使用@Cacheable。我对Cacheable中的值和键映射参数有点混淆。以下是我正在做的: 这里发生的情况是,第二个方法依赖于第一个方法的选定值,但问题是假设当我传递zoneMastNo=1和areaMastNo=1时,第二个方法返回第一个方法结果。事实上,我有很多服务,因此,我希望使用公共值来缓存特定的用例。现在我的问题是: 我如何解决这个问题 对每个服务都使用cac
本文向大家介绍CodeIgniter启用缓存和清除缓存的方法,包括了CodeIgniter启用缓存和清除缓存的方法的使用技巧和注意事项,需要的朋友参考一下 Codeigniter支持缓存技术,以达到最快的速度。尽管CI已经相当高效了,但是网页中的动态内容、主机的内存CPU和数据库读取速度等因素直接影响了网页的加载速度。依靠网页缓存,你的网页可以达到近乎静态网页的加载速度,因为他们将程序输出的结果保
我最近开始缓存一个方法的结果。我使用@Cacheable和@CachePut来实现所需的功能。 但不知何故,save操作并没有更新findAll方法的缓存。以下是相同的代码段: 对于findAll方法的第一个调用,它将结果存储在“persons”缓存中,对于所有后续调用,它将返回相同的结果,即使在两者之间执行了save()操作。 我对缓存很陌生,所以任何关于这方面的建议都会很有帮助。 谢谢