package com.butterfly.redis.generator.config;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;

import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

import com.butterfly.redis.generator.client.JedisClient;
import com.butterfly.redis.generator.properties.JedisProperties;
import com.google.common.base.Strings;

/**
 * @Description
 * @author butterfly
 * @date 2017年8月3日 下午1:51:16
 */
@Configuration  
@PropertySource(value = "classpath:jedis.properties")
@EnableConfigurationProperties(JedisProperties.class)// 开启属性注入,通过@autowired注入   
@ConditionalOnClass(JedisClient.class) // 判断这个类是否在classpath中存在  
public class JedisSpringConfig {
	
	/**
	 * 属性配置对象
	 */
	@Autowired
	private JedisProperties prop;

	
	/**
	 * @Description 
	 * 
	 * @author butterfly
	 * @return
	 */
	@Bean(name = "jedisPool")
	public JedisPool jedisPool() {
		JedisPoolConfig config = new JedisPoolConfig();
		config.setMaxTotal(prop.getMaxTotal());
		config.setMaxIdle(prop.getMaxIdle());
		config.setMaxWaitMillis(prop.getMaxWait());
		config.setTestOnBorrow(prop.getTestOnBorrow());
		JedisPool jedisPool = null;
		if (!Strings.isNullOrEmpty(prop.getPassword())) {
			jedisPool = new JedisPool(config, prop.getHost(), prop.getPort(), prop.getTimeout(), prop.getPassword());
		} else {
			jedisPool = new JedisPool(config, prop.getHost(), prop.getPort(), prop.getTimeout());
		}
		return jedisPool;
	}

	
	/**
	 * @Description 
	 * 
	 * @author butterfly
	 * @param pool
	 * @return
	 */
	@Bean
	@ConditionalOnMissingBean(JedisClient.class) // 容器中如果没有RedisClient这个类,那么自动配置这个RedisClient
	public JedisClient redisClient(@Qualifier("jedisPool") JedisPool pool) {
		JedisClient jedisClient = new JedisClient();
		jedisClient.setJedisPool(pool);
		return jedisClient;
	}
}