0

メソッドを呼び出すには、ラムダ式でハッシュマップを使用して、データを検索するために呼び出す必要があるメソッドを見つけます。問題は、このメソッドを直接呼び出すと、キャッシュが問題なく機能することです。しかし、マップからこのメソッドを取得すると、すべてキャッシュされません。それを修正する可能性はありますか、それとも Spring Cache はそのようなシナリオには使用できませんか?

@Component
@Scope("singleton")
@SuppressWarnings("SpringJavaAutowiringInspection")
public class RulesZ
{
    // Lookup is marked as @FunctionalInterface
    Map<String,Lookup> lookups; 

    @Autowired
    LookupZMapper lookzMapper;

    @PostConstruct
    public void init()
    {
        lookups = new LinkedHashMap<String,Lookup>();
        lookups.put("shortform",(String kur, String type,String typeAddition)->  getKurForm(kur,type,typeAddition));
    }

@Cacheable(value="lookupKur")
    public String getKurForm(String kur, String type, String typeAddition)
    {
        LookupZtExample ex = new LookupZExample();
        ex.createCriteria()...;
        List res = lookzMapper.selectByExample(ex);
...
return "found value";
    }

つまり、メソッド getKurForm を直接呼び出すと、キャッシュされますが、次を使用して呼び出すと:

RulesZ.getLookups().get("shortform").lookup("val1","DF","DS"));

メソッド呼び出しごとにDBを検索します。

4

0 に答える 0