最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Java中 Redisson 自定义注解怎么与 Spring Boot Starter 自动化配置集成
时间:2026-07-21 09:20:04 编辑:袖梨 来源:一聚教程网
Redisson自定义注解结合Spring Boot Starter实现自动化配置,核心是通过@DistributedLock声明锁行为、AOP切面拦截执行加解锁、Starter自动装配RedissonClient与切面Bean,并支持SpEL动态生成key、多模式配置及IDE配置提示。
Redisson 自定义注解结合 Spring Boot Starter 实现自动化配置,核心在于:注解声明行为、切面拦截执行、自动装配支撑、配置可扩展。整个流程不依赖手动 Bean 注册,而是由 Starter 统一完成初始化与织入。
自定义分布式锁注解(如 @DistributedLock)
定义一个运行时保留的注解,支持参数化控制锁名、超时、等待时间等:
- 用 @Target({METHOD}) 和 @Retention(RUNTIME) 标明作用范围和生命周期
- 添加属性如 value()(锁 key 表达式)、waitTime()、leaseTime()、keySpEL()(支持 SpEL 动态生成 key)
- 避免直接写死 key,推荐用
"#id"或"order:#order.id"等方式从方法参数提取
基于 AOP 的切面实现加解锁逻辑
切面需依赖已自动注入的 RedissonClient,不能自己 new 或重复创建客户端:
- 使用 @Aspect + @Around 拦截带注解的方法,获取注解元数据和方法参数
- 通过 SpEL 解析器(
StandardEvaluationContext)计算最终 lockKey - 调用
redissonClient.getLock(key).tryLock(waitTime, leaseTime, TimeUnit.SECONDS) - 加锁失败抛出特定异常(如
DistributedLockException),成功则放行;方法结束或异常时确保 unlock
Starter 内自动装配切面与客户端
在自定义 Starter 的自动配置类中,统一注册关键 Bean:
立即学习“Java免费学习笔记(深入)”;
-
RedissonClient:由
@ConditionalOnMissingBean保护,支持单机/集群/哨兵等模式,读取spring.redisson.*或自定义前缀(如bobo.redisson.*)配置 -
DistributedLockAspect:声明为
@Bean,构造时注入 RedissonClient,无需额外条件(只要 Client 存在就启用) -
切面优先级:可通过
@Order(Ordered.HIGHEST_PRECEDENCE + 10)避免与其他 AOP 冲突(如事务切面)
配置提示与多环境适配
让注解能力开箱即用,还需配套配置支持:
- 在
META-INF/additional-spring-configuration-metadata.json中声明spring.redisson.*属性,使 IDE 显示提示 - 支持 YAML 多文档配置(如
redisson.yml单独存放复杂 Config 结构,再通过spring.config.import=redisson.yml引入) - 若项目已用 Spring Data Redis,注意
spring.redis.database与 Redisson 的setDatabase()是否一致,避免 key 冲突