我正在尝试使用spring Cache实现对我的方法的缓存。问题是第一次执行后这个方法没有被执行,这意味着属性没有被加载。如果我删除@cacheable注释,它工作得很好。我的要求是,每当添加新属性时,这个方法才应该运行并加载属性,否则它应该从缓存返回。
@Cacheable("mycache")
public Properties loadPropertyFile() throws Throwable {
Properties properties = new Properties();
try {
logger.debug("Loading properties.");
if (this.locations != null) {
for (Resource location : this.locations) {
if (logger.isInfoEnabled()) {
logger.info("Loading properties file from " + location);
}
try {
properties = PropertiesLoaderUtils.loadAllProperties(location.getFilename());
} catch (IOException ex) {
if (this.ignoreResourceNotFound) {
if (logger.isWarnEnabled()) {
logger.warn("Could not load properties from "
+ location + ": " + ex.getMessage());
}
} else {
throw ex;
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return properties;
}
XML文件:
<cache:annotation-driven />
<bean id="cacheManager" class="org.springframework.cache.support.SimpleCacheManager">
<property name="caches">
<set>
<bean class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean" p:name="mycache" />
</set>
</property>
代码工作正常:按照您配置cacheable
注释的方式,它实际上永远不会失效,因为没有触发驱逐的条件。通常,您可以使用condition
参数并向其传递一个SPeL表达式,但仍然无法检查基础文件是否已更改并有条件地执行method body。
“cache until changed”的实现无法工作,因为在实际重新加载文件之前(或者检查文件的大小或时间戳),您不知道是否添加了“new property”。
如果定期重新加载是一种可接受的替代方法,那么您可以尝试Apache Commons Configurations的ReloadingFileBasedConfigurationBuilder或使用Spring的@schedule
进行试验。
问题内容: 我的任务是利用SpringCache作为我们的一项服务,以减少数据库查找的次数。在测试实现时,我注意到一些可缓存操作通过日志语句多次调用。调查显示,如果在可缓存的方法中调用了可缓存的操作,则嵌套操作根本不会被缓存。因此,嵌套操作的后续调用将导致进一步的查找。 下面列出了描述问题的简单单元测试: 这两种方法的实际工作对于测试用例本身并不重要,因为仅应测试缓存。 我以某种方式理解了为什么不
本文向大家介绍浅谈SpringCache与redis集成实现缓存解决方案,包括了浅谈SpringCache与redis集成实现缓存解决方案的使用技巧和注意事项,需要的朋友参考一下 缓存可以说是加速服务响应速度的一种非常有效并且简单的方式。在缓存领域,有很多知名的框架,如EhCache 、Guava、HazelCast等。Redis作为key-value型数据库,由于他的这一特性,Redis也成为一
classpath : herosphp\cache\CacheFactory herophp的缓存是通过缓存工厂来管理的,CacheFactory 负责创建缓存,默认采用的是单例模式,也就是同一类型的缓存在应用中只会存再一个实例。 $cacher = CacheFactory::create('file', true); 我们为缓存工具定义了一个 ICache接口,它定义了以下接口方法: get
我试图将Redis与Spring的一起使用,但需要根据Spring Boot风格的应用程序属性有条件地打开或关闭缓存。我的第一次尝试似乎不起作用。 application.properties文件: properties类: 服务方法注释: 结果如下: 有没有人知道问题出在哪里,或者有没有其他的方法可以达到这个目的?
MiniFramework 支持三种缓存方式,分别是:Memcached、Redis 和 File(磁盘文件存储)。 Memcached $cache = \Mini\Cache::factory ('Memcache', array ( 'host' => 'localhost', //主机 'port' => 11211
问题内容: 我正在用python写一个类,并且我有一个属性,该属性将花费相对较长的时间来计算,因此 我只想执行一次 。此外,它会不会被类的每个实例需要的,所以 我不想在默认情况下做到这一点 在。 我是Python的新手,但不是编程人员。我可以想出一种很容易做到这一点的方法,但是我一遍又一遍地发现,“ Pythonic”做事的方法通常比我在其他语言中的经验要简单得多。 在Python中是否有“正确”