Springboot+Redisson封装分布式锁Starter( 三 )

话不多说,封装的逻辑已经在注释中写的很清晰了 。
将切面也放入自动配置spring.factories中
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.itdl.lock.config.RedisLockConfig,com.itdl.lock.anno.RedisLockAop测试注解版分布式锁
@RedisLock(lockName = "demo4_lock")public TestEntity getById4(Long id) throws InterruptedException {index++;log.info("current index is : {}", index);Thread.sleep(new Random().nextInt(10) * 100);TestEntity testEntity = new TestEntity(new Random().nextLong(), UUID.randomUUID().toString(), new Random().nextInt(20) + 10);log.info("模拟查询数据库:{}", testEntity);return testEntity;}可以看到,我们就是一个注解分布式锁的效果,而分布式锁与缓存注解通常不会一起使用,因为一般会在存在事务问题的地方我们会使用锁,在多个JMV操作同一条数据做写操作时需要加分布式锁 。
编写测试程序
@SpringBootTestpublic class TestRedisLockRunner6 {@Autowiredprivate MyTestService myTestService;// 创建一个固定线程池private ExecutorService executorService = Executors.newFixedThreadPool(16);/*** 多线程访问请求,测试切面的线程安全性*/@Testpublic void testMultiMyTestService() throws InterruptedException {for (int i = 0; i < 100; i++) {executorService.submit(() -> {try {TestEntity t1 = myTestService.getById4(1L);} catch (InterruptedException e) {e.printStackTrace();}});}// 主线程休息10秒种Thread.sleep(60000);}}测试结果

Springboot+Redisson封装分布式锁Starter

文章插图
5、小结我们将分布式锁基于缓存扩展了一版,也就是说本starter即有分布式缓存功能,又有分布式锁功能 。
而注解版的分布式锁能够解决大多数场景的并核问题,小粒度的Lock锁方式补全其他场景 。
【Springboot+Redisson封装分布式锁Starter】将两者封装成为一个starter,我们就可以很方便的使用分布式锁功能,引入相关包即可,开箱即用 。




推荐阅读