spring boot + redis cache + @Cacheable适用于某些方法,而不适用于其他方法

时间:2015-07-14 17:41:30

标签: java spring caching redis spring-boot

我使用带有redis的spring boot作为缓存,通过减少查询RDBMS系统来提高应用程序性能。 它可以正常工作,因为它可以准确地缓存另一个控制器的方法,但它不会缓存下面的控制器:

@RequestMapping(method = RequestMethod.GET)
    @Cacheable("findByTaxOfficeId")
    private TaxPayerNameResponse findByTaxOfficeId(@RequestParam(required = true, value = "uid") String taxOfficeId) {
        StampDutyOffice stampDutyOffice = null;

对于工作弹簧启动控制器,配置看起来相同。 可以在下面找到正常工作的缓存Controller方法的示例:

 @RequestMapping(value = "/stampdutyoffice", method = RequestMethod.GET)
    @Cacheable("getTaxPayerNameByTinIdOrJtbIdReqParam2")
    public TaxPayerNameResponse2 getTaxPayerNameByTinIdOrJtbIdReqParam2(@RequestParam(required = true, value = "uid") String tinIdOrJtbIdStampDutyOffice) {
        return getTaxPayerNameByTinIdOrJtbId2(tinIdOrJtbIdStampDutyOffice);
    }

请问有什么问题? 在此先感谢您的帮助。

2 个答案:

答案 0 :(得分:5)

对于某些Spring注释,您应遵守注释方法的两条规则,以确保它有效:

  • 它应该是PUBLIC方法
  • 不应该在同一个班级内调用

与@Async相同的情况,例如

答案 1 :(得分:2)

您的findByTaxOfficeId方法私有,将其设为 public