Java redis.clients.jedis.exceptions.jedisception:无法从池中获取资源
redis.propertiesJava 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
#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;
}
}
......
}