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