Dans mon application, j'ai plusieurs méthodes cacheable avec plusieurs clés:evict Cache sur l'une des touches multiples
@Cacheable(cacheNames = "valueCodes", key = "{#value, #fieldId, #projectId}")
@Cacheable(cacheNames = "fieldNames", key = "{#field, #value, #projectId}")
@Cacheable(cacheNames = "qi", key = "{#langCode, #question, #projectId}")
@Cacheable(cacheNames = "fieldCodes", key = "{#name, #projectId}")
Maintenant, je veux une méthode cachevict qui cleares toutes les caches où ne la touche #projectId , qui est un UUID, correspond à:
@CacheEvict(value = {"valueCodes", "fieldCodes", "qi"; "fieldCodes"}, key = "#projectId")
J'ai lu dans this article que ce n'est pas possible et que
Seul le dans chacune des cacheNames d'annotation evict regex clé correspondant à plus d'un élément
Je ne suis pas vraiment sûr de ce qu'ils veulent dire par là, mais je suppose qu'il a quelque chose à voir avec l'aide regex dans SpEL.
Je commencé à penser à concatinating mes clés dans une clé:
@Cacheable(cacheNames="cahceName", key="concat(#projectId).concat(#otherKey)")
et en utilisant regex pour correspondre à toutes les touches avec le projectId suivi d'un caractère générique. Mais je ne pouvais pas vraiment trouver un moyen de le faire.
Est-ce que ce que j'essaie d'accomplir est possible? Si oui, comment je fais ça?
J'ai trouvé un moyen simple de faire cela, mais nécessite un peu plus de code sur ma fin. Dans le cas où vous êtes intéressé par la solution, jetez un oeil à mes solutions. –