Ple*_*mor 13 java spring caching spring-data
我想替换旧的:
@Component
public interface MyEntityRepository extends JpaRepository<MyEntity, Integer> {
@QueryHints({@QueryHint(name = CACHEABLE, value = "true")})
MyEntity findByName(String name);
}
Run Code Online (Sandbox Code Playgroud)
这样:
@Component
public interface MyEntityRepository extends JpaRepository<MyEntity, Integer> {
@Cacheable(value = "entities")
MyEntity findByName(String name);
}
Run Code Online (Sandbox Code Playgroud)
因为我想使用高级缓存功能,如不缓存空值等.
为此,我按照Spring教程https://spring.io/guides/gs/caching/
如果我不注释我的Application.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");
}
// ...
}
Run Code Online (Sandbox Code Playgroud)
我在启动时收到以下错误:
java.lang.IllegalStateException:未指定CacheResolver,并且未找到CacheManager类型的bean.注册CacheManager bean或从配置中删除@EnableCaching批注
如果我用CacheResolver bean替换My CacheManager bean,我会得到同样的错误:
@Bean
public CacheResolver cacheResolver() {
return new SimpleCacheResolver(new ConcurrentMapCacheManager("entities"));
}
Run Code Online (Sandbox Code Playgroud)
我错过了什么吗?
Ple*_*mor 17
@herau你是对的我必须给这个豆命名!问题是有另一个bean"cacheManager",所以最后,我没有注释Application,并创建了一个配置:
@EnableCaching
@Configuration
public class CacheConf{
@Bean(name = "springCM")
public CacheManager cacheManager() {
return new ConcurrentMapCacheManager("entities");
}
}
Run Code Online (Sandbox Code Playgroud)
在MyEntityRepository:
@Cacheable(value = "entities", cacheManager = "springCM")
MyEntity findByName(String name);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17532 次 |
| 最近记录: |