RuoYi-Vue-Plus (@Async注解的异步配置)

本文详细介绍了RuoYi-Vue-Plus中使用@Async注解进行异步配置的过程。首先,探讨了JDK动态代理和CGLIB代理的区别,接着讲解了如何配置线程池,以及AsyncConfig的实现,包括定义异步线程池和异常处理。最后,通过测试代码展示了在Controller和Service层的应用,并提醒了@Async注解与@Transactional注解结合使用时的事务管理规则。

一、了解JDK、CGLIB代理的区别

JDK动态代理和CGLIB动态代理是两种不同的方式来实现代理模式。

实现方式

JDK动态代理是基于接口的代理

而CGLIB动态代理则是基于类的代理

代理区别

JDK动态代理要求目标对象实现接口

CGLIB动态代理则可以代理没有实现接口的类

二、 AsyncConfig 异步配置

前置:增加以下2个注解

注解:

@EnableAsync(proxyTargetClass = true): 开启异步配置,proxyTargetClass 表示用CGLIB代理

@Configuration  交由spring管理
@EnableAsync(proxyTargetClass = true)
@Configuration
public class AsyncConfig extends AsyncConfigurerSupport {
   
   
1-首先要配置线程池</
### Ruoyi-Vue-Plus 常用注解及其使用说明 #### @PreAuthorize 注解 `@PreAuthorize` 是基于 Spring Security 的权限控制注解,用于方法级别的访问控制。它通过 SPEL(Spring Expression Language)表达式来定义哪些角色或用户可以执行该方法。 ```java @PreAuthorize("hasRole('ADMIN')") public void adminOnlyMethod() { // 只有拥有 ADMIN 角色的用户才能调用此方法 } ``` 上述代码表示只有具有 `ADMIN` 权限的角色才可以调用 `adminOnlyMethod()` 方法[^1]。 --- #### @Log 注解 `@Log` 是 RuoYi 框架自定义的日志记录注解,主要用于操作日志的自动记录功能。它可以标记在控制器的方法上,当请求被处理完成后会自动记录用户的操作行为。 ```java @Log(title = "用户管理", businessType = BusinessType.INSERT) @PostMapping("/addUser") public AjaxResult addUser(@RequestBody User user) { userService.add(user); return AjaxResult.success(); } ``` 在此示例中,`@Log` 记录的操作标题为“用户管理”,业务类型为新增操作 (`BusinessType.INSERT`)。每次调用 `/addUser` 接口时都会触发日志记录逻辑[^2]。 --- #### @Cacheable 和 @CacheEvict 注解 这两个注解分别用于缓存数据和清除缓存。它们通常配合 Redis 或其他缓存工具一起使用。 - **@Cacheable**: 缓存查询结果。 ```java @Cacheable(value = "userCache", key = "#id") public User getUserById(Long id) { return userRepository.findById(id).orElse(null); } ``` 这段代码会在第一次调用 `getUserById` 方法时将返回的结果存储到名为 `userCache` 的缓存中,并以后续相同的参数调用时直接从缓存读取数据[^3]。 - **@CacheEvict**: 清除指定缓存项。 ```java @CacheEvict(value = "userCache", key = "#id") public void deleteUser(Long id) { userRepository.deleteById(id); } ``` 删除用户的同时也会清空对应的缓存条目。 --- #### @Async 注解 `@Async` 用于异步执行任务,适合耗时较长的操作场景。启用异步支持需要在配置类中标记 `@EnableAsync`。 ```java @Async public CompletableFuture<Void> asyncTask(String taskName) throws InterruptedException { Thread.sleep(5000); // 模拟耗时操作 System.out.println(taskName + " 已完成"); return CompletableFuture.completedFuture(null); } ``` 以上代码展示了如何创建一个异步任务,在主线程不阻塞的情况下运行后台任务。 --- #### @EventListener 注解 `@EventListener` 用来监听特定类型的事件并作出响应。它是实现事件驱动架构的重要组件之一。 ```java @EventListener(ContextRefreshedEvent.class) public void handleContextRefresh(ContextRefreshedEvent event) { log.info("应用上下文已刷新!"); } ``` 每当 Spring 容器启动完毕后,这个方法会被触发一次,打印一条消息表明容器已经加载成功。 --- ### 总结 RuoYi-Vue-Plus 提供了一系列强大的注解机制帮助开发者简化开发流程、增强安全性以及优化性能表现。这些注解涵盖了权限校验、日志记录、缓存管理等多个方面,能够显著提升项目的可维护性和扩展性。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

syfjava

请博主喝杯蜜雪冰城

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值