SpringBoot@Cacheable注解的属性使⽤
cacheNames和value
指定缓存组件的名字,通过下⾯代码可以看出可以将返回结果放在哪个缓存中,可以通过数组的⽅式指定多个缓存
/**
* Alias for {@link #cacheNames}.
*/
@AliasFor("cacheNames")
String[]value()default{};
/**
* Names of the caches in which method invocation results are stored.
* <p>Names may be used to determine the target cache (or caches), matching
* the qualifier value or bean name of a specific bean definition.
* @since 4.2
* @see #value
* @see CacheConfig#cacheNames
*/
@AliasFor("value")
String[]cacheNames()default{};
key
缓存数据的时候使⽤的key,它是⽤来指定对应的缓存,模拟使⽤⽅法参数值作为key的值。也可以使⽤SpEL表达式的值来指定
/**
* Spring Expression Language (SpEL) expression for computing the key dynamically.
* <p>Default is {@code ""}, meaning all method parameters are considered as a key,
* unless a custom {@link #keyGenerator} has been configured.
* <p>The SpEL expression evaluates against a dedicated context that provides the
* following meta-data:
* <ul>
* <li>{@code #hod}, {@code #root.target}, and {@code #root.caches} for
* references to the {@link flect.Method method}, target object, and
* affected cache(s) respectively.</li>
* <li>Shortcuts for the method name ({@code #hodName}) and target class
* ({@code #root.targetClass}) are also available.
* <li>Method arguments can be accessed by index. For instance the second argument
* can be accessed via {@code #root.args[1]}, {@code #p1} or {@code #a1}. Arguments
* can also be accessed by name if that information is available.</li>
* </ul>
*/
String key()default"";
名称位置描述⽰例methodName root object被调⽤的⽅法名称#hodName Method root object被调⽤的⽅法#
Target root object当前被调⽤的⽬标对象#root.target targetClass root object当前被调⽤的⽬标对象类#root.targetClass args root object被调⽤⽅法的参数列表#root.args[0]
caches root object调⽤的缓存列表#root.caches[0].name argument name evaluation context⽅法的参数名称可以直接使⽤#参数名#p0,#a0等等result evaluation context执⾏⽅法后的返回值#result
可以通过这个参数提⽰列表看看到这个key所⽀持的root object对象有哪些,通过这样的⽅式可以指定对应的key值。
keyGenerator
这个是表⽰指定的key的⽣成器,当然在之前分享中我们说过⼀个简单的key的⽣成策略。这⾥我们还可以通过⾃定的⽅式来实现这个key的⽣成策略。
import org.springframework.cache.interceptor.KeyGenerator;
import t.annotation.Bean;
import t.annotation.Configuration;
import flect.Method;
import java.util.Arrays;
@Configuration
public class MyCacheConfig {
@Bean("myKeyGenerator")
public KeyGenerator keyGenerator(){
return new KeyGenerator(){
@Override
public Object generate(Object target, Method method, params){
Name()+"["+ Arrays.asList(params).toString()+"]";
}
};
}
}
在使⽤的时候可以通过⼀下的⽅式进⾏配置
@Cacheable(cacheNames ={"emp"},keyGenerator ="myKeyGenerator")
cacheManager指定缓存管理器
/**
* The bean name of the custom {@link org.springframework.cache.CacheManager} to use to
* create a default {@link org.springframework.cache.interceptor.CacheResolver} if none
* is set already.
* <p>Mutually exclusive with the {@link #cacheResolver} attribute.
* @see org.springframework.cache.interceptor.SimpleCacheResolver
* @see CacheConfig#cacheManager
*/
String cacheManager()default"";
/**
* The bean name of the custom {@link org.springframework.cache.interceptor.CacheResolver}
* to use.
* @see CacheConfig#cacheResolver
*/
String cacheResolver()default"";
condition
指定复合条件的情况下才缓存。也可以通过SpEL表达式进⾏设置。这个配置规则和上⾯表格中的配置规则是相同的。/**
* Spring Expression Language (SpEL) expression used for making the method
* caching conditional.
* <p>Default is {@code ""}, meaning the method result is always cached.
* <p>The SpEL expression evaluates against a dedicated context that provides the
* following meta-data:
* <ul>
* <li>{@code #hod}, {@code #root.target}, and {@code #root.caches} for
* references to the {@link flect.Method method}, target object, and
* affected cache(s) respectively.</li>
* <li>Shortcuts for the method name ({@code #hodName}) and target class
* ({@code #root.targetClass}) are also available.
* <li>Method arguments can be accessed by index. For instance the second argument
* can be accessed via {@code #root.args[1]}, {@code #p1} or {@code #a1}. Arguments
* can also be accessed by name if that information is available.</li>
* </ul>
*/
String condition()default"";
unless(除⾮)
当这个条件为true的时候,⽅法的返回值就不会被缓存。
/**
* Spring Expression Language (SpEL) expression used to veto method caching.
* <p>Unlike {@link #condition}, this expression is evaluated after the method
* has been called and can therefore refer to the {@code result}.
* <p>Default is {@code ""}, meaning that caching is never vetoed.
* <p>The SpEL expression evaluates against a dedicated context that provides the
* following meta-data:
* <ul>
* <li>{@code #result} for a reference to the result of the method invocation. For
* supported wrappers such as {@code Optional}, {@code #result} refers to the actual
* object, not the wrapper</li>
* <li>{@code #hod}, {@code #root.target}, and {@code #root.caches} for
* references to the {@link flect.Method method}, target object, and
* affected cache(s) respectively.</li>
* <li>Shortcuts for the method name ({@code #hodName}) and target class
* ({@code #root.targetClass}) are also available.
* <li>Method arguments can be accessed by index. For instance the second argument
* can be accessed via {@code #root.args[1]}, {@code #p1} or {@code #a1}. Arguments
* can also be accessed by name if that information is available.</li>
* </ul>
* @since 3.2
*/
String unless()default"";
sync
是否异步
/**
* Synchronize the invocation of the underlying method if several threads are
cacheable* attempting to load a value for the same key. The synchronization leads to
* a couple of limitations:
* <ol>
* <li>{@link #unless()} is not supported</li>
* <li>Only one cache may be specified</li>
* <li>No other cache-related operation can be combined</li>
* </ol>
* This is effectively a hint and the actual cache provider that you are
* using may not support it in a synchronized fashion. Check your provider
* documentation for more details on the actual semantics.
* @since 4.3
* @see org.springframework.cache.Cache#get(Object, Callable)
*/
boolean sync()default false;
注意
在使⽤这个属性的时候,当这个属性为true的时候,unless属性是不能使⽤的。
{@link #unless()} is not supported
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论