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); } }