package org.jeecg.boot.starter.lock.core;
|
|
|
import com.google.common.base.Preconditions;
|
import lombok.extern.slf4j.Slf4j;
|
import org.jeecg.boot.starter.lock.core.strategy.RedissonConfigStrategy;
|
import org.jeecg.boot.starter.lock.prop.RedissonProperties;
|
import org.jeecg.boot.starter.lock.core.strategy.impl.ClusterRedissonConfigStrategyImpl;
|
import org.jeecg.boot.starter.lock.core.strategy.impl.MasterslaveRedissonConfigStrategyImpl;
|
import org.jeecg.boot.starter.lock.core.strategy.impl.SentinelRedissonConfigStrategyImpl;
|
import org.jeecg.boot.starter.lock.core.strategy.impl.StandaloneRedissonConfigStrategyImpl;
|
import org.jeecg.boot.starter.lock.enums.RedisConnectionType;
|
import org.redisson.Redisson;
|
import org.redisson.config.Config;
|
|
|
/**
|
* Redisson配置管理器,用于初始化的redisson实例
|
*
|
* @author zyf
|
* @date 2020-11-12
|
*/
|
@Slf4j
|
public class RedissonManager {
|
|
private Config config = new Config();
|
|
private Redisson redisson = null;
|
|
public RedissonManager() {
|
}
|
|
public RedissonManager(RedissonProperties redissonProperties) {
|
//装配开关
|
Boolean enabled = redissonProperties.getEnabled();
|
if (enabled) {
|
try {
|
config = RedissonConfigFactory.getInstance().createConfig(redissonProperties);
|
redisson = (Redisson) Redisson.create(config);
|
} catch (Exception e) {
|
log.error("Redisson初始化错误", e);
|
}
|
}
|
}
|
|
public Redisson getRedisson() {
|
return redisson;
|
}
|
|
/**
|
* Redisson连接方式配置工厂
|
* 双重检查锁
|
*/
|
static class RedissonConfigFactory {
|
|
private RedissonConfigFactory() {
|
}
|
|
private static volatile RedissonConfigFactory factory = null;
|
|
public static RedissonConfigFactory getInstance() {
|
if (factory == null) {
|
synchronized (Object.class) {
|
if (factory == null) {
|
factory = new RedissonConfigFactory();
|
}
|
}
|
}
|
return factory;
|
}
|
|
/**
|
* 根据连接类型創建连接方式的配置
|
*
|
* @param redissonProperties
|
* @return Config
|
*/
|
Config createConfig(RedissonProperties redissonProperties) {
|
Preconditions.checkNotNull(redissonProperties);
|
Preconditions.checkNotNull(redissonProperties.getAddress(), "redis地址未配置");
|
RedisConnectionType connectionType = redissonProperties.getType();
|
// 声明连接方式
|
RedissonConfigStrategy redissonConfigStrategy;
|
if (connectionType.equals(RedisConnectionType.SENTINEL)) {
|
redissonConfigStrategy = new SentinelRedissonConfigStrategyImpl();
|
} else if (connectionType.equals(RedisConnectionType.CLUSTER)) {
|
redissonConfigStrategy = new ClusterRedissonConfigStrategyImpl();
|
} else if (connectionType.equals(RedisConnectionType.MASTERSLAVE)) {
|
redissonConfigStrategy = new MasterslaveRedissonConfigStrategyImpl();
|
} else {
|
redissonConfigStrategy = new StandaloneRedissonConfigStrategyImpl();
|
}
|
Preconditions.checkNotNull(redissonConfigStrategy, "连接方式创建异常");
|
|
return redissonConfigStrategy.createRedissonConfig(redissonProperties);
|
}
|
}
|
|
|
}
|