package com.qianwen.core.redis.lock;
|
|
import org.redisson.Redisson;
|
import org.redisson.api.RedissonClient;
|
import org.redisson.config.ClusterServersConfig;
|
import org.redisson.config.Config;
|
import org.redisson.config.MasterSlaveServersConfig;
|
import org.redisson.config.SentinelServersConfig;
|
import org.redisson.config.SingleServerConfig;
|
import com.qianwen.core.redis.lock.BladeLockProperties;
|
import com.qianwen.core.tool.utils.StringUtil;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Configuration;
|
|
@EnableConfigurationProperties({BladeLockProperties.class})
|
@Configuration(proxyBeanMethods = false)
|
@ConditionalOnClass({RedissonClient.class})
|
@ConditionalOnProperty(value = {"blade.lock.enabled"}, havingValue = "true")
|
/* loaded from: blade-starter-redis-9.3.0.0-SNAPSHOT.jar:org/springblade/core/redis/lock/BladeLockAutoConfiguration.class */
|
public class BladeLockAutoConfiguration {
|
private static Config singleConfig(BladeLockProperties properties) {
|
Config config = new Config();
|
SingleServerConfig serversConfig = config.useSingleServer();
|
serversConfig.setAddress(properties.getAddress());
|
String password = properties.getPassword();
|
if (StringUtil.isNotBlank(password)) {
|
serversConfig.setPassword(password);
|
}
|
serversConfig.setDatabase(properties.getDatabase().intValue());
|
serversConfig.setConnectionPoolSize(properties.getPoolSize().intValue());
|
serversConfig.setConnectionMinimumIdleSize(properties.getIdleSize().intValue());
|
serversConfig.setIdleConnectionTimeout(properties.getConnectionTimeout().intValue());
|
serversConfig.setConnectTimeout(properties.getConnectionTimeout().intValue());
|
serversConfig.setTimeout(properties.getTimeout().intValue());
|
return config;
|
}
|
|
private static Config masterSlaveConfig(BladeLockProperties properties) {
|
Config config = new Config();
|
MasterSlaveServersConfig serversConfig = config.useMasterSlaveServers();
|
serversConfig.setMasterAddress(properties.getMasterAddress());
|
serversConfig.addSlaveAddress(properties.getSlaveAddress());
|
String password = properties.getPassword();
|
if (StringUtil.isNotBlank(password)) {
|
serversConfig.setPassword(password);
|
}
|
serversConfig.setDatabase(properties.getDatabase().intValue());
|
serversConfig.setMasterConnectionPoolSize(properties.getPoolSize().intValue());
|
serversConfig.setMasterConnectionMinimumIdleSize(properties.getIdleSize().intValue());
|
serversConfig.setSlaveConnectionPoolSize(properties.getPoolSize().intValue());
|
serversConfig.setSlaveConnectionMinimumIdleSize(properties.getIdleSize().intValue());
|
serversConfig.setIdleConnectionTimeout(properties.getConnectionTimeout().intValue());
|
serversConfig.setConnectTimeout(properties.getConnectionTimeout().intValue());
|
serversConfig.setTimeout(properties.getTimeout().intValue());
|
return config;
|
}
|
|
private static Config sentinelConfig(BladeLockProperties properties) {
|
Config config = new Config();
|
SentinelServersConfig serversConfig = config.useSentinelServers();
|
serversConfig.setMasterName(properties.getMasterName());
|
serversConfig.addSentinelAddress(properties.getSentinelAddress());
|
String password = properties.getPassword();
|
if (StringUtil.isNotBlank(password)) {
|
serversConfig.setPassword(password);
|
}
|
serversConfig.setDatabase(properties.getDatabase().intValue());
|
serversConfig.setMasterConnectionPoolSize(properties.getPoolSize().intValue());
|
serversConfig.setMasterConnectionMinimumIdleSize(properties.getIdleSize().intValue());
|
serversConfig.setSlaveConnectionPoolSize(properties.getPoolSize().intValue());
|
serversConfig.setSlaveConnectionMinimumIdleSize(properties.getIdleSize().intValue());
|
serversConfig.setIdleConnectionTimeout(properties.getConnectionTimeout().intValue());
|
serversConfig.setConnectTimeout(properties.getConnectionTimeout().intValue());
|
serversConfig.setTimeout(properties.getTimeout().intValue());
|
return config;
|
}
|
|
private static Config clusterConfig(BladeLockProperties properties) {
|
Config config = new Config();
|
ClusterServersConfig serversConfig = config.useClusterServers();
|
serversConfig.addNodeAddress(properties.getNodeAddress());
|
String password = properties.getPassword();
|
if (StringUtil.isNotBlank(password)) {
|
serversConfig.setPassword(password);
|
}
|
serversConfig.setMasterConnectionPoolSize(properties.getPoolSize().intValue());
|
serversConfig.setMasterConnectionMinimumIdleSize(properties.getIdleSize().intValue());
|
serversConfig.setSlaveConnectionPoolSize(properties.getPoolSize().intValue());
|
serversConfig.setSlaveConnectionMinimumIdleSize(properties.getIdleSize().intValue());
|
serversConfig.setIdleConnectionTimeout(properties.getConnectionTimeout().intValue());
|
serversConfig.setConnectTimeout(properties.getConnectionTimeout().intValue());
|
serversConfig.setTimeout(properties.getTimeout().intValue());
|
return config;
|
}
|
|
@ConditionalOnMissingBean
|
@Bean
|
public RedisLockClient redisLockClient(BladeLockProperties properties) {
|
return new RedisLockClientImpl(redissonClient(properties));
|
}
|
|
@ConditionalOnMissingBean
|
@Bean
|
public RedisLockAspect redisLockAspect(RedisLockClient redisLockClient) {
|
return new RedisLockAspect(redisLockClient);
|
}
|
|
private static RedissonClient redissonClient(BladeLockProperties properties) {
|
Config config;
|
BladeLockProperties.Mode mode = properties.getMode();
|
switch (mode) {
|
case sentinel:
|
config = sentinelConfig(properties);
|
break;
|
case cluster:
|
config = clusterConfig(properties);
|
break;
|
case master:
|
config = masterSlaveConfig(properties);
|
break;
|
case single:
|
config = singleConfig(properties);
|
break;
|
default:
|
config = new Config();
|
break;
|
}
|
return Redisson.create(config);
|
}
|
}
|