2015-11-03 62 views
4

我的应用程序是由Spring休息控制器使用redis调用服务。 我使用的春天开机启动Redis的1.2.5,我已经在我的beans.xml文件中定义的模板:春天Jedis连接没有返回到池

<bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" 
    p:host-name="${spring.redis.host}" 
    p:use-pool="true" 
    p:port="${spring.redis.port}" 
/> 

<bean id="redisTemplateForTransaction" class="org.springframework.data.redis.core.RedisTemplate" 
    p:connection-factory-ref="jedisConnectionFactory" 
    p:keySerializer-ref="stringRedisSerializer" 
    p:valueSerializer-ref="jsonRedisSerializerForTransaction" 
    p:enableTransactionSupport="true"> 
    <qualifier value="redisTemplateForTransaction" /> 
</bean> 

当我启动超过800查询我的应用程序块。我知道我已达到池中的默认连接数。

为什么在请求处理结束时不自动返回连接?

如何在交易模式下工作,使任何传入的请求会得到其Redis的连接,并在处理结束返回呢?

回答

2

你需要通过提供一个PlatformTransactionManager豆,以使您的应用程序事务管理。

这样做最简单的方法是添加@EnableTransactionManagement到您的春季启动应用程序。如果这不可行,请配置一个PlatformTransactionManager bean。重用现有的DataSourceTransactionManager是最简单的方法。如果您不使用符合JDBC的数据库,只需放入H2内存数据库即可。

如果你想使用一个JTA事务管理器,看到这篇博客文章:https://spring.io/blog/2011/08/15/configuring-spring-and-jta-without-full-java-ee/

心连心,马克

+0

非常感谢你的帮助,我会尝试,让你知道。 – mordekhai

+0

但是令人惊讶的是,我们没有控制连接池来简单地调用returnResource或returnResourceObject。 – mordekhai

+0

Spring Data Redis隐藏客户端详细信息。问题是,一旦事务请求开始,如果没有配置事务管理器,事务/连接就不会被释放。 – mp911de