N8网站源码下载

N8网站源码下载联系方式:QQ:2747044651 网址http://zhengtuwl.com/thread-433-1-2.html 目前在研究redis缓存,之前人员定位组件项目中,引入redis服务,主要应用了其操作缓存的工具,主要通过redisTemplate和jedis两种方式来操作。而后来在搭建springboot框架(spring中也可实现)时,发现了注解的方式,可以直接通过注解方式,对操作数据库的方法内容进行缓存。
缓存注解主要有@Cacheable、@CachePut、@CacheEvict三种。
@Cacheable 在内部方法执行前操作缓存—–用于查询。若发现缓存中已经有该内容,就不在执行内部方法,直接返回缓存数据。
@CacheEvict 可以设置是否在方法执行前操作缓存,通过参数 beforeInvocation 设置true为方法前操作缓存,false则方法执行后操作缓存—-用于删除。
@CachePut 在内部方法执行后,再操作缓存—–用于增加、更新。注意方法必须有返回值,通过返回值来存缓存。
具体实现如下截图:

Cacheable
这里写图片描述

CacheEvict
这里写图片描述
allEntries = true 清空所有缓存数据 默认为false
beforeInvocation = true 内部方法执行前,操作缓存, 默认为false

CachePut
这里写图片描述

在上述三种注解后面括号里可以有以下多种属性:
1) key(缓存键值),若省略则按照配置里面的keyGenerator方式生成key(可自定义).
这里写图片描述
上图代码是在缓存redis的配置文件类里面实现的,通过继承CachingConfigurerSupport类,覆盖该方法。默认是以类名.方法名.参数变量名作为缓存的key,上面稍作修改。
2)value(缓存名称) 不定义,已在类级别上全局声明 @CacheConfig(cacheNames = “AudioFile”)
3)unless 当条件不满足时,才会操作缓存,解决查出空值存入缓存,第二次就不会再去读数据库的问题。保证值为空时,从数据库查询。
4)condition 在执行内部方法前,判断参数是否符合条件,符合则先查询缓存,无则执行方法;不符合,则直接执行方法。

综上,在配置完所有注解之后,还需要开启缓存功能,通过@EnableCaching注解,springboot下直接放在启动类前面。

二、异步任务注解
通过注解实现线程池的配置,首先需要添加一个配置类实现AsynConfigurer接口,然后实现getAsyncExecutor方法。在使用的地方,方法上加@Async注解,即可实现方法的异步调用。
主要配置步骤如下:

application.properties文件中
这里写图片描述

异步任务配置类实现
这里写图片描述

异步方法的实现
这里写图片描述

方法的异步调用
这里写图片描述
三、注意事项
以上注解都是spring封装的,在注入容器的类上注释,并在控制层调用,能够实现,若在同一个类中注解并调用,不可实现。
原因:https://blog.csdn.net/clementad/article/details/47339519
N8网站源码下载 大体意思:
Spring在扫描bean时,若方法中有带注解(@Transactional,@Async等)的,会为这些bean动态生成一个代理类。当带注解方法被调用时,实际已经调到代理类的对应方法上执行,但是若调用者本身也在该bean中,代理类对应方法里得执行代码会指向原来的bean方法,因而不会去执行注解所具备的功能。
例子如下,对于开启事务的注解@Transactional
这里写图片描述
A类中两个方法,a方法调用b方法,实际是在代理类proxy$A中执行a方法,然后可以发现,其实质还是在执行标记1处的方法,并没有执行代理类b地方,没有开启事务。

阅读更多

猜你喜欢

转载自blog.csdn.net/qq_42974877/article/details/81701052