All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.jeesuite.cache.redis.JedisProviderFactoryBean Maven / Gradle / Ivy

There is a newer version: 1.4.0
Show newest version
/**
 * 
 */
package com.jeesuite.cache.redis;

import java.util.regex.Pattern;

import org.apache.commons.lang3.Validate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.util.StringUtils;

import com.jeesuite.cache.redis.cluster.JedisClusterProvider;
import com.jeesuite.cache.redis.sentinel.JedisSentinelProvider;
import com.jeesuite.cache.redis.standalone.JedisStandaloneProvider;
import com.jeesuite.spring.InstanceFactory;
import com.jeesuite.spring.SpringInstanceProvider;

import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.Protocol;

/**
 * redis服务提供者注册工厂
 * @description 
* @author vakin * @date 2015年04月26日 */ public class JedisProviderFactoryBean implements ApplicationContextAware,InitializingBean{ protected static final Logger logger = LoggerFactory.getLogger(JedisProviderFactoryBean.class); /** * */ public static final String DEFAULT_GROUP_NAME = "default"; private static final String REDIS_PROVIDER_SUFFIX = "RedisProvider"; private Pattern pattern = Pattern.compile("^.+[:]\\d{1,5}\\s*$"); private String mode = JedisStandaloneProvider.MODE;// private JedisPoolConfig jedisPoolConfig; //用来区分不同组的缓存 private String group; private String servers; private Integer timeout = 3000; //单位:毫秒 private String password; private int database = Protocol.DEFAULT_DATABASE; private String masterName; private String clientName; private ApplicationContext context; public void setGroup(String group) { this.group = group; } public String getGroup() { if(group == null)group = DEFAULT_GROUP_NAME; return group; } public void setMode(String mode) { this.mode = mode; } public void setJedisPoolConfig(JedisPoolConfig jedisPoolConfig) { this.jedisPoolConfig = jedisPoolConfig; } public void setServers(String servers) { this.servers = servers; } public void setTimeout(Integer timeout) { this.timeout = timeout; } public void setPassword(String password) { this.password = password; } public void setDatabase(int database) { this.database = database; } public void setMasterName(String masterName) { this.masterName = masterName; } public void setClientName(String clientName) { this.clientName = clientName; } @Override public void setApplicationContext(ApplicationContext context) throws BeansException { this.context = context; // InstanceFactory.setInstanceProvider(new SpringInstanceProvider(context)); } @Override public void afterPropertiesSet() throws Exception { if(jedisPoolConfig == null)throw new Exception("jedisPoolConfig Not config ??"); if(org.apache.commons.lang3.StringUtils.isAnyBlank(mode,servers)){ throw new Exception("type or servers is empty??"); } registerRedisProvier(); } /** * */ private void registerRedisProvier() { String beanName = getGroup() + REDIS_PROVIDER_SUFFIX; if(context.containsBean(beanName)){ throw new RuntimeException("已包含group为["+this.group+"]的缓存实例"); } String[] servers = StringUtils.tokenizeToStringArray(this.servers, ConfigurableApplicationContext.CONFIG_LOCATION_DELIMITERS); //检查ip和port格式 for (String server : servers) { if(!pattern.matcher(server).matches()){ throw new RuntimeException("参数servers:"+this.servers+"错误"); } } Class beanClass = null; if(JedisStandaloneProvider.MODE.equalsIgnoreCase(mode)){ beanClass = JedisStandaloneProvider.class; }else if(JedisClusterProvider.MODE.equalsIgnoreCase(mode)){ beanClass = JedisClusterProvider.class; }else if(JedisSentinelProvider.MODE.equalsIgnoreCase(mode)){ beanClass = JedisSentinelProvider.class; // Validate.notBlank(masterName, "Sentinel模式[masterName]参数 required"); }else{ throw new RuntimeException("参数mode:"+this.mode+"不支持"); } DefaultListableBeanFactory acf = (DefaultListableBeanFactory) context.getAutowireCapableBeanFactory(); BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(beanClass); beanDefinitionBuilder.addConstructorArgValue(getGroup())// .addConstructorArgValue(jedisPoolConfig)// .addConstructorArgValue(servers)// .addConstructorArgValue(timeout);// if(JedisStandaloneProvider.MODE.equalsIgnoreCase(mode) || JedisSentinelProvider.MODE.equalsIgnoreCase(mode)){ beanDefinitionBuilder.addConstructorArgValue(org.apache.commons.lang3.StringUtils.trimToNull(password))// .addConstructorArgValue(database)// .addConstructorArgValue(clientName); } if(JedisSentinelProvider.MODE.equalsIgnoreCase(mode)){ beanDefinitionBuilder.addConstructorArgValue(masterName); } acf.registerBeanDefinition(beanName, beanDefinitionBuilder.getRawBeanDefinition()); // logger.info("register JedisProvider OK,Class:{},beanName:{}",beanClass.getSimpleName(),beanName); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy