@CachePut 注解失效问题

1. 方法调用方式

@CachePut 注解仅适用于通过 Spring 管理的 bean 的代理调用。如果方法是在同一个类内部直接调用的(即 self-invocation),那么 Spring 的 AOP 代理将不会生效,@CachePut 注解也就无法起作用。

解决方案

将方法移动到另一个 bean 中:将 updateConfigFields 方法移动到另一个 Spring 管理的 bean 中,并通过依赖注入的方式调用。

示例

假设你有一个 FormFieldService 类和一个 CacheService 类,你可以将 updateConfigFields 方法移动到 CacheService 类中:

@Service
public class CacheService {

    @CachePut(value = "anins:cache:formField", key = "#tenantId + ':' + #code")
    public List<FieldMetaDTO> updateConfigFields(String code, String tenantId) {
        // 方法实现
    }
}

然后在 FormFieldService 类中注入 CacheService 并调用其方法:

@Service
public class FormFieldService {

    @Autowired
    private CacheService cacheService;

    public void saveOrUpdateField(FormField formField) {
        // ... 现有逻辑 ...
        cacheService.updateConfigFields(code, iTenantApi.getCurrentTenantId());
    }
}

2.方法返回值

在这里插入图片描述

@CachePut 注解要求方法有一个非 null 的返回值,该返回值将被放入缓存中。如果方法返回 null,则缓存将不会被更新。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值