基于redisson分布式锁的spring定时任务
引入依赖
<dependency> <groupId>org.redisson</groupId> <artifactId>redisson</artifactId> <version>3.8.1</version> </dependency>
RedissonClient
@Configuration public class MyRedissonConfig { @Bean RedissonClient redisson() throws IOException { Config config = new Config(); //config.useClusterServers().addNodeAddress("127.0.0.1:6379"); config.useSingleServer().setAddress("redis://192.168.29.128:6379"); return Redisson.create(config); } }
spring的scheduling定时任务类
@Service public class CronService1 { @Autowired RedissonClient redisson; //@Scheduled(cron = "0 5,6,7,8,9,10,11,12,13,14 * * * ? ") @Scheduled(cron = "10 5/1 * * * ? ")// 从5分开始每隔一分钟执行一次 private void execute() throws Exception { //获取Lock锁,设置锁的名称 RLock lock = redisson.getLock("my-lock"); if (lock.tryLock(3, TimeUnit.SECONDS)){ try { System.out.println(OffsetDateTime.now() + " &redisson上锁:" + Thread.currentThread().getId()); //模拟业务处理20秒 TimeUnit.SECONDS.sleep(3); } catch (Exception e) { e.printStackTrace(); } finally { System.out.println(OffsetDateTime.now() + " &redisson解锁:" + Thread.currentThread().getId()); //释放 lock.unlock(); } } } }
下一篇:
对mvc及三层架构的个人理解