版本说明
spring-boot: 2.3.5.RELEASE
redisson: 3.16.2
引入依赖
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson-spring-boot-starter</artifactId>
<version>3.16.2</version>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</exclusion>
</exclusions>
</dependency>
在resources下新建redisson.yaml配置文件(单机模式)
参照官网说明: https://github.com/redisson/redisson/wiki/2.-%E9%85%8D%E7%BD%AE%E6%96%B9%E6%B3%95#21-%E7%A8%8B%E5%BA%8F%E5%8C%96%E9%85%8D%E7%BD%AE%E6%96%B9%E6%B3%95
编写配置类
package com.example.demo.config;
import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
import org.redisson.spring.data.connection.RedissonConnectionFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.Resource;
import java.io.IOException;
/**
* @author xxf
* @class Redisson
* @date 2021/9/14 15:19
*/
@Configuration
public class RedissonSpringDataConfig {
@Bean
public RedissonConnectionFactory redissonConnectionFactory(RedissonClient redisson) {
return new RedissonConnectionFactory(redisson);
}
/**
* @description redisson配置
* @author xxf
* @date 2021/9/15 10:52
* @param configFile
* @return
*/
@Bean(destroyMethod = "shutdown")
public RedissonClient redisson(@Value("classpath:/redisson.yaml") Resource configFile) throws IOException {
Config config = Config.fromYAML(configFile.getInputStream());
//测试看门狗(默认30s)
config.setLockWatchdogTimeout(50000);
String s = config.toYAML();
System.out.println(s);
return Redisson.create(config);
}
}
编写测试类
package com.example.demo.controller;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author xxf
* @class RedissonTestController
* @date 2021/9/14 13:24
*/
@RestController
public class RedissonTestController {
@Autowired
private RedissonClient redissonClient;
private static String KEY = "mykey";
@GetMapping("/testRedisson")
public String testRedisson() {
RLock lock = redissonClient.getLock(KEY);
//判断是否有任务在执行
if (lock.isLocked()) {
System.out.println(System.currentTimeMillis() + "任务已被锁定,稍后再试");
return "fail";
}
try {
lock.lock();
System.out.println("执行任务中...");
//执行20s
Thread.sleep(20000);
System.out.println("任务完成");
} catch (Exception e) {
System.out.println("获取锁异常");
} finally {
//释放锁
lock.unlock();
}
return "ok";
}
}
启动项目测试