我正在尝试替换旧的:
@Component
public interface MyEntityRepository extends JpaRepository<MyEntity, Integer> {
@QueryHints({@QueryHint(name = CACHEABLE, value = "true")})
MyEntity findByName(String name);
}
由此:
@Component
public interface MyEntityRepository extends JpaRepository<MyEntity, Integer> {
@Cacheable(value = "entities")
MyEntity findByName(String name);
}
因为我想使用高级缓存功能,比如不缓存空值等等。
为此,我遵循了Spring教程https://spring.io/guides/gs/caching/
如果我没有为我的应用程序添加注释。在java中,缓存根本不起作用。
但是如果我添加EnableCaching和CacheManager bean:
package my.application.config;
@EnableWebMvc
@ComponentScan(basePackages = {"my.application"})
@Configuration
@EnableCaching
public class Application extends WebMvcConfigurerAdapter {
@Bean
public CacheManager cacheManager() {
return new ConcurrentMapCacheManager("entities");
}
// ...
}
我在启动时收到以下错误:
Java语言lang.IllegalStateException:未指定CacheResolver,也未找到CacheManager类型的bean。注册CacheManager bean或从配置中删除@EnableCaching注释
如果我用CacheResolver bean替换My CacheManager bean,我会得到同样的错误,如下所示:
@Bean
public CacheResolver cacheResolver() {
return new SimpleCacheResolver(new ConcurrentMapCacheManager("entities"));
}
我错过什么了吗?
就我而言,Spring Boot库很旧,无法轻松升级。所以我使用了EHCache 2版本,它在我的应用程序中工作。以下是一个我觉得很有用的项目:https://github.com/TechPrimers/spring-ehcache-example/blob/master/src/main/resources/ehcache.xml
@赫劳你说得对,我得给豆子起名!问题是还有另一个bean“cacheManager”,所以最后,我没有对应用程序进行注释,而是创建了一个配置:
@EnableCaching
@Configuration
public class CacheConf{
@Bean(name = "springCM")
public CacheManager cacheManager() {
return new ConcurrentMapCacheManager("entities");
}
}
在MyEntityRepository中:
@Cacheable(value = "entities", cacheManager = "springCM")
MyEntity findByName(String name);
我开发了一个使用注释方法。代码为: 现在,我想在一些事件之后驱逐这个缓存: 一些与manager相关的报表已更新(添加或删除)。 之后,应该驱逐与管理器相关的缓存,这样,应用程序将获得新的数据,而不是使用该缓存中的现有数据。我为此开发了以下方法: 我调用inside方法,该方法更新Manager与其报表的关系。然而,这一个工作断断续续,我不确定这是不是正确的方式驱逐缓存。此外,缓存使用作为key的
它可能非常简单,但我想知道我是否可以在一个方法上调用@cacheable和@cacheevict,如下所示: 上面的代码是在每次调用方法时逐出empListCache,还是只在缓存已满时逐出? 多谢了。
我有一个服务与下一个方法: 我从控制器中调用getTestWithId100方法,但它只获得新值。 部分ehcache.xml: 为什么它不工作?我尝试了不同的键,但没有成功。
我有一个用并尝试使用注释。该方法还用注释。将忽略注释。是否可以在Mapstruct方法上使用?
问题内容: 我在源代码下找到了以下文档 CachePut批注不会导致目标方法被跳过-而是总是导致该方法被调用并将其结果放入缓存中。 这是否意味着如果使用,updateCustomer方法将仅执行一次,结果将在缓存中更新。随后对updateCustomer的调用将不会执行updateCustomer,而只会更新缓存。 在的情况下,方法将在每次调用时执行,结果将在缓存中更新。 我的理解正确吗? 问题答
问题内容: 我是spring批注的新手,我想创建一个示例示例,该示例显示在spring 3.1中使用 @Cacheable批注 是否有人指导创建此示例? 问题答案: 希望下面的链接可能会对你有所帮助...... 一个示例应用程序。 还可以查看Spring的缓存抽象文档和spring源博客文章。