当前位置: 首页 > 知识库问答 >
问题:

Spring可缓存问题-不注入服务

宇文勇
2023-03-14

我使用的是最新版本的spring和缓存概念。我的(rest)服务类似乎没有注入缓存注释。如果我删除它们,它可以完美地工作,但我不使用缓存,这不是我想要的。

应用程序

@SpringBootApplication
@EnableCaching
public class MyApplication{

    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }

    @Bean
    public CacheManager cacheManager() {
        SimpleCacheManager cacheManager = new SimpleCacheManager();
        cacheManager.setCaches(Arrays.asList(new ConcurrentMapCache("MyCache")));
        return cacheManager;
    }

服务:

@CacheConfig(cacheNames = "MyCache")
@Service
public class MyServiceImpl implements MyService {

    private final Logger logger = LoggerFactory.getLogger(this.getClass());
    private final String errormessage = "Error getting books";
    @Autowired
    private UserRepositoryCrud userRepository;

    public MyServiceImpl () {

    }

    @Override
    @Cacheable(value = "MyCache", key = "#description", unless = "#result?.size() > 0")
    public final List<Books> getBooks(String description) {
        logger.debug("Starting getBooksService");
        //service implementation ...

(我还有一个只调用此服务的Restcontroler)调用此方法getBooks时,我在记录器上得到了一个null指针,但在调试时,我意识到所有内容都是null,即使是errormessage字符串。。。如果我删除@Cacheable注释,它就会工作,但我没有缓存工作,这不是我想要的。

你知道会出什么问题吗?

谢谢,

共有1个答案

商绍元
2023-03-14

伙计们,我发现了问题...因为方法是最终的!!!我花了很多时间才找到这个!

 类似资料:
  • 我想将主数据缓存到Redis。 所以,我写了这些代码。 和 和ymlfile 但是,缓存不工作... 无论何时调用printTest方法,都将执行“getTest”方法。Redis没有数据。。。我的代码中有什么问题? SpringBoot版本是1.4.0 依赖关系是

  • 我有一个简单的spring boot with redis应用程序,我正在构建该应用程序来缓存3个实体的主数据:电子邮件、产品和国家。我使用了spring boot starter依赖项 我还在应用程序中使用启动配置。属性文件 可缓存方法包括 问题是,一旦我从这个类加载其中一个方法,其他两个方法返回与第一个方法相同的数据,即使它们返回不同的列表,并且具有不同的可缓存注释值。我做错了什么?

  • 问题内容: 我正在使用Spring 3和Hibernate 3.6开发Web应用程序。目前,我尝试了解Spring和Hibernate的缓存工作原理。我找到了一些有关使用Hibernate进行缓存的资源以及一些有关Spring的资源,现在我尝试将我的信息汇总在一起。我仍然对这两个框架都有一些疑问,如果有人可以回答或告诉我这里列出的事实是否正确,我将很高兴。 在大多数情况下,简短的回答(是/否)就足

  • 我在后台使用PostgreSQL数据库,在Spring Boot中使用Spring数据。 我有一个@Controller; 调用具有@Transactional(readOnly=false)的服务层方法。该方法从头构建实体对象,并使用entityRepository中内置的Spring数据将其保存到数据库中。saveAndFlush(实体) 然后通过RestTemplate调用共享同一数据库的远

  • 主要内容:缓存穿透,缓存击穿,缓存雪崩在实际的业务场景中,Redis 一般和其他数据库搭配使用,用来减轻后端数据库的压力,比如和关系型数据库 MySQL 配合使用。 Redis 会把 MySQL 中经常被查询的数据缓存起来,比如热点数据,这样当用户来访问的时候,就不需要到 MySQL 中去查询了,而是直接获取 Redis 中的缓存数据,从而降低了后端数据库的读取压力。如果说用户查询的数据 Redis 没有,此时用户的查询请求就会转到

  • 我是flutter应用程序开发的初学者。当我在模拟器上运行我的flutter默认项目代码时,我面临这个问题: 在调试模式下在IA仿真器上的AOSP上启动lib\main.dart...运行Gradle任务'assembleDebug'... 失败:生成失败,出现异常。 错误:无法打开设置文件“C:\Users\Administrator\StudioProjects\myapp\android\s