package xxx ide import redis.clients.jedis.{Jedis, JedisPool, JedisPoolConfig, Protocol} spa import org.apache.commons.pool2.impl.GenericObjectPoolConfig scala import org.slf4j.LoggerFactory code import com.typesafe.scalalogging.slf4j.Logger 对象 /** 接口 * Redis客户端包装,用于提供分布式接口 * */ class RedisSink(makeJedisPool : () => JedisPool) extends Serializable { lazy val pool = makeJedisPool() } /** * Redis客户端包装的伴生对象,用于便捷的生成类的实例 * */ object RedisSink{ def apply(redisHost: String, redisPort: Int, password: String, database: Int): RedisSink = { val createJedisPoolFunc = () => { val poolConfig = new GenericObjectPoolConfig() val pool = new JedisPool(poolConfig, redisHost, redisPort, Protocol.DEFAULT_TIMEOUT, password, database) val hook = new Thread { override def run = { pool.destroy() } } sys.addShutdownHook(hook.run) pool } new RedisSink(createJedisPoolFunc) } } |