可以在Feign客户端上使用Spring @ Cache *吗?

时间:2018-04-03 11:13:56

标签: spring caching guava feign

我有一个Feign客户端,它从微服务中请求令牌。 由于我正在进行多次调用,我想缓存从Feign客户端收到的响应并使用Spring Guava缓存,但它似乎不起作用。我所拥有的只是配置类和Feign客户端上的注释。

我在堆栈溢出的某处读到Feign可能不支持@Cacheable注释。这是真的吗?

2 个答案:

答案 0 :(得分:1)

最后,我设法解决了我的问题。 我最后做的是:

- >创建新的@Service注释类

- >使用@FeignClient注释注入接口

- >将所有@Cache相关注释(使用@Caching注释)放在从接口调用方法的方法上。

有效! :)

答案 1 :(得分:0)

比安卡(Bianca)应该做的是在她的项目中添加一个@Service批注的类,以便她可以使用@cacheable批注。

使用FeignClient的传统方法是仅使用@FeignClient注释接口,然后从其他项目/类调用这些方法。她添加了一个带@Service注释的类,在其中调用feignclients方法以缓存所需的内容。

繁体:

FeignClient类:

@FeignClient(name="my_feign-client", url = "http://myurl.com/")
public interface MyFeignClient {
    @GetMapping("/test")
    public ResponseEntity<String> test() throws FeignException;

在哪里调用伪客户端方法:

public class TestClass {
    @Autowired
    private MyFeignClient myFeignClient ;
    
    public String callTest() {
    ...
        return myFeignClient.test();
    }

比安卡的方法:

假客户端类保持不变。

带有缓存的服务类:

@Service
@CacheConfig(cacheNames={"test"})
public class TestService {
    @Autowired
    private MyFeignClient myFeignClient ;
    
    @Cacheable
    public String callCachedTest() {
    ...
    return myFeignClient.test();
}

最后,调用缓存方法的类,即feignClient:

public class TestClass {
    @Autowired
    private TestService testService ;
    
    public String callTest() {
    ...
        return testService.callCachedTest();
    }