首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在spring boot中,从具有@transactional注释的方法调用@Cacheable时,@Cacheable不会创建缓存键

在Spring Boot中,当一个带有@Transactional注解的方法调用一个带有@Cacheable注解的方法时,@Cacheable注解不会创建缓存键。

@Transactional注解用于标记一个方法需要在事务中执行。当一个带有@Transactional注解的方法被调用时,Spring会开启一个事务,并在方法执行完成后提交或回滚事务。

@Cacheable注解用于标记一个方法的返回值应该被缓存起来,以便在后续调用时可以直接从缓存中获取结果,而不需要再执行方法体。@Cacheable注解可以指定一个缓存名称,如果没有指定,默认使用方法的签名作为缓存名称。

然而,当一个带有@Transactional注解的方法调用一个带有@Cacheable注解的方法时,Spring会将这两个注解的功能合并起来。具体来说,Spring会先执行带有@Transactional注解的方法,然后再执行带有@Cacheable注解的方法。由于事务的存在,@Cacheable注解不会创建缓存键,因为在事务中,方法的返回值还没有被提交到缓存中。

如果想要在带有@Transactional注解的方法中使用@Cacheable注解创建缓存键,可以将@Cacheable注解放在一个单独的方法中,并在带有@Transactional注解的方法中调用该方法。

以下是一个示例:

代码语言:txt
复制
@Service
public class MyService {

    @Autowired
    private MyCache myCache;

    @Transactional
    public void doSomething() {
        // 执行一些事务操作

        // 调用带有@Cacheable注解的方法
        String result = getCachedData();

        // 继续执行其他操作
    }

    @Cacheable("myCache")
    public String getCachedData() {
        // 从数据库或其他地方获取数据
        return "cachedData";
    }
}

在上面的示例中,getCachedData()方法带有@Cacheable注解,用于创建缓存键。doSomething()方法带有@Transactional注解,用于开启事务。在doSomething()方法中,先执行事务操作,然后调用getCachedData()方法获取缓存数据。

推荐的腾讯云相关产品:腾讯云云数据库Redis(https://cloud.tencent.com/product/redis)

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券