Redisson配置类
/**
* @author hwq
* @date 2019/05/02
* <p>
* RedissonManager类
* </p>
*/
@Slf4j
@Component
public class RedissonManager {
private Config config = new Config();
private Redisson redisson = null;
public Redisson getRedisson() {
return redisson;
}
private static String redis1Ip = PropertiesUtil.getProperty("redis1.ip");
private static Integer redis1Port = Integer.parseInt(PropertiesUtil.getProperty("redis1.port"));
private static String redis2Ip = PropertiesUtil.getProperty("redis2.ip");
private static Integer redis2Port = Integer.parseInt(PropertiesUtil.getProperty("redis2.port"));
@PostConstruct
private void init() {
try {
config.useSingleServer().setAddress(new StringBuilder().append(redis1Ip).append(":").append(redis1Port).toString());
redisson = (Redisson) Redisson.create(config);
log.info("初始化Redisson结束");
} catch (Exception e) {
log.error("redisson init error", e);
}
}
}
properties文件中的配置
redis.ip1=127.0.0.1
redis.port1=6379
redis.ip2=127.0.0.1
redis.port2=6380
Pom.xml文件中需要引入的
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-avro</artifactId>
<version>2.9.0</version>
</dependency>
代码实现:
@Scheduled(cron = "0 */1 * * * ?")//每一分钟执行一次
public void closeOrderTaskV4() {
log.info("关闭订单任务开启");
RLock lock = redissonManager.getRedisson().getLock(Const.REDIS_LOCK.CLOSE_ORDER_TASK_LOCK);
boolean getLock = false;
try {
if (getLock = lock.tryLock(0, 50, TimeUnit.SECONDS)) {
log.info("Redisson获取到分布式锁:{},ThreadName:{}", Const.REDIS_LOCK.CLOSE_ORDER_TASK_LOCK, Thread.currentThread().getName());
int hour = Integer.parseInt(PropertiesUtil.getProperty("close.order.task.time.hour", "2"));
// iOrderService.closeOrder(hour);
} else {
log.info("Redisson没有获取到分布式锁:{},ThreadName:{}", Const.REDIS_LOCK.CLOSE_ORDER_TASK_LOCK, Thread.currentThread().getName());
}
} catch (InterruptedException e) {
log.error("Redisson分布式锁获取异常", e);
} finally {
if (!getLock) {
return;
}
lock.unlock();
log.info("Redisson分布式锁释放锁");
}
log.info("关闭订单任务结束");
}