Java redis.clients.jedis.exceptions.jedisception:无法从池中获取资源

Java redis.clients.jedis.exceptions.jedisception:无法从池中获取资源,java,redis,jedis,Java,Redis,Jedis,redis.properties #jedisPoolConfig redis.minIdle=100 redis.maxIdle=500 redis.maxTotal=50000 redis.maxWaitMillis=10000 redis.testOnBorrow=true #jedisPool redis.host=192.168.13.169 redis.port=6379 redis.timeout=3000 redis.port2=6380 #redis-sentin

redis.properties

#jedisPoolConfig
redis.minIdle=100
redis.maxIdle=500
redis.maxTotal=50000 
redis.maxWaitMillis=10000  
redis.testOnBorrow=true


#jedisPool
redis.host=192.168.13.169
redis.port=6379
redis.timeout=3000

redis.port2=6380

#redis-sentinel
redis.sentinel=192.168.13.169:26379
redis.master=mymaster
spring redis.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:p="http://www.springframework.org/schema/p"
   xsi:schemaLocation="http://www.springframework.org/schema/beans
   http://www.springframework.org/schema/beans/spring-beans.xsd">

<!--properties配置-->
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
        <list>
            <value>classpath:redis.properties</value>
        </list>
    </property>
    <property name="ignoreUnresolvablePlaceholders" value="true"/>
</bean>

<!-- 连接池配置信息 -->
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
    <property name="maxIdle" value="${redis.maxIdle}" />
    <property name="maxTotal" value="${redis.maxTotal}" />
    <property name="maxWaitMillis" value="${redis.maxWaitMillis}" />
    <property name="testOnBorrow" value="${redis.testOnBorrow}" />
</bean>

<!--初级版:单实例-->
<bean id="jedisPool" class="redis.clients.jedis.JedisPool" scope="singleton">
    <constructor-arg name="poolConfig" ref="jedisPoolConfig" />
    <constructor-arg name="host" value="${redis.host}" />
    <constructor-arg name="port" value="${redis.port}" type="int" />
</bean>

<!--主从-->
<bean id="shardedJedisPool" class="redis.clients.jedis.ShardedJedisPool">
    <constructor-arg index="0" ref="jedisPoolConfig" />
    <constructor-arg index="1">
        <list>
            <bean class="redis.clients.jedis.JedisShardInfo">
                <constructor-arg name="host" value="${redis.host}" />
                <constructor-arg name="port" value="${redis.port}" />
                <constructor-arg name="timeout" value="${redis.timeout}" />
                <constructor-arg name="name" value="master" />
            </bean>
            <bean class="redis.clients.jedis.JedisShardInfo">
                <constructor-arg name="host" value="${redis.host}" />
                <constructor-arg name="port" value="${redis.port2}" />
                <constructor-arg name="timeout" value="${redis.timeout}" />
                <constructor-arg name="name" value="slave1" />
            </bean>
        </list>
    </constructor-arg>
</bean>

<!--sentinel模式-->
<bean id="redisSentinelConfiguration" class="org.springframework.data.redis.connection.RedisSentinelConfiguration">
    <constructor-arg name="master" value="${redis.master}" />
    <constructor-arg name="sentinelHostAndPorts">
        <set>
            <value>${redis.sentinel}</value>
        </set>
    </constructor-arg>
</bean>

<!--Jedis连接池-->
<bean id="jedisConnFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" p:use-pool="true">
    <property name="hostName" value="${redis.host}"/>
    <constructor-arg ref="redisSentinelConfiguration" />
    <constructor-arg ref="jedisPoolConfig" />
</bean>

<!-- redis template definition -->
<bean id="redisTemplate" class="org.springframework.data.redis.core.StringRedisTemplate" p:connection-factory-ref="jedisConnFactory"/>

<bean id="stringRedisSerializer" class="org.springframework.data.redis.serializer.StringRedisSerializer"/>
服务

@服务
公共类RedisService扩展了BinaryRedisService{
公共再贴现服务(){}
公共字符串集(最终字符串键、最终字符串值){
返回(字符串)this.execute(新函数(){
公共字符串回调(ShardedJedis ShardedJedis){
返回sharedjedis.set(键,值);
}
});
}
......
}
公共类二进制服务{
@自动连线
受保护的ShardedJedisPool ShardedJedisPool;
公共二进制RedisService(){
}
受保护的T执行(功能乐趣){
ShardedJedis ShardedJedis=null;
T=零;
试一试{
shardedJedis=this.shardedJedisPool.getResource();
t=fun.callBack(shardedJedis);
}捕获(异常var8){
var8.printStackTrace();
}最后{
if(null!=碎片绝地){
碎片绝地武士。关闭();
}
返回t;
}
}
......
}
问题

redis.clients.jedis.exceptions.JedisException:无法获取 位于的池中的资源 redis.clients.util.Pool.getResource(Pool.java:51)位于 redis.clients.jedis.ShardedJedisPool.getResource(ShardedJedisPool.java:36) 在 org.henry.service.BinaryRedisService.execute(BinaryRedisService.java:29) 位于org.henry.service.RedisService.set(RedisService.java:25) org.henry.service.RedisService$$FastClassBySpringCGLIB$$f57afd3.invoke() 在 org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) 在 org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:721) 在 org.springframework.aop.framework.ReflectiveMethodInvocation.procedue(ReflectiveMethodInvocation.java:157) 在 org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99) 在 org.springframework.transaction.interceptor.TransactionSpectSupport.invokeWithinTransaction(TransactionSpectSupport.java:282) 在 org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96) 在 org.springframework.aop.framework.ReflectiveMethodInvocation.procement(ReflectiveMethodInvocation.java:179) 在 org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92) 在 org.springframework.aop.framework.ReflectiveMethodInvocation.procement(ReflectiveMethodInvocation.java:179) 在 org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:656) 在 org.henry.service.RedisService$$EnhancerBySpringCGLIB$$d4e52321.set() 在 org.henry.controller.JedisController.test2(JedisController.java:51) 位于的sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法) invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 位于java.lang.reflect.Method.invoke(Method.java:497) org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) 在 org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:133) 在 org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:116) 在 org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827) 在 org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738) 在 org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) 在 org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963) 在 org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897) 在 org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) 在 org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861) 位于javax.servlet.http.HttpServlet.service(HttpServlet.java:687) org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) 位于javax.servlet.http.HttpServlet.service(HttpServlet.java:790) org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:837) 在 org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:583) 在 org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) 在 org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:548) 在 org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:226) 在 org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1180) 在 org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:511) 在 org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185) 在 org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1112) 在 org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) 在 org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:213) 在 org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:119) 在 org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:134) 位于org.eclipse.jetty.server.server.handle(server.java:524) org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:319)位于 org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:253) 在 org.ec
@Controller
public class JedisController {
......
@Autowired
private RedisService redisService;
@RequestMapping(value = "test2")
@ResponseBody
public String test2(){
    redisService.set("key2","v2");
    return redisService.get("key1");
}
......
}
@Service
public class RedisService extends BinaryRedisService {
public RedisService() {}

public String set(final String key, final String value) {
    return (String)this.execute(new Function<ShardedJedis, String>() {
        public String callBack(ShardedJedis shardedJedis) {
            return shardedJedis.set(key, value);
        }
    });
}
......
}

public class BinaryRedisService {
@Autowired
protected ShardedJedisPool shardedJedisPool;

public BinaryRedisService() {
}

protected <T> T execute(Function<ShardedJedis, T> fun) {
    ShardedJedis shardedJedis = null;
    T t = null;

    try {
        shardedJedis = this.shardedJedisPool.getResource();
        t = fun.callBack(shardedJedis);
    } catch (Exception var8) {
        var8.printStackTrace();
    } finally {
        if(null != shardedJedis) {
            shardedJedis.close();
        }

        return t;
    }
}
......
}