有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

javaspringboot+rediscache+@Cacheable适用于某些方法,而不适用于其他方法

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

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

工作的spring引导控制器的配置看起来相同。 可以在下面找到正常工作的缓存控制器方法的示例:

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

请问有什么问题? 提前谢谢你的帮助


共 (2) 个答案

  1. # 1 楼答案

    对于某些Spring注释,您应该遵守注释方法的两条规则,以确保其正常工作:

    • 它应该是一种公共方法
    • 不应从同一类中调用它

    以@Async为例,情况也一样

  2. # 2 楼答案

    您的findByTaxOfficeId方法是私有,请将其设置为公共