ahojte,
vo webovej aplikacii mam problem s pripojenim na DB (PostgreSQL) a na
noSQL REDIS, pomocou connectoru JEDIS, pouzivam tomcat 7.0.29.
aplikacia po par minutach pouzivania "zastane". predpokladam, ze je
problem v apache commons connection pool-e.
pouzivam:
- pripojenie na REDIS pomocou JEDIS connector (jedis-2.1.0.jar)
- pripojenie na PostgreSQL DB (JDBC driver: postgresql-9.1-901.jdbc4.jar).
REDIS server version: 2.4 (windows version)
JEDIS version: 2.1.0
connection pool: apache commons pool version 1.6
tomcat version: 7.0.29
po debugovani som zistil, ze sa pouziva pravdepodobne jeden connection
pool a v triede:
org.apache.commons.pool.impl.GenericObjectPool, v funkcii
public T borrowObject() throws Exception {
...
if (latch.getPair() == null && !latch.mayCreate()) {
if(maxWait <= 0) {
latch.wait();
pretoze latch.getPair() = null, maxWait is -1 a latch.mayCreate() ==
false, takze latch.wait() sa vykona, a aplikacia "zastane".
je mozne vobec pouzivat jeden connection pool pre pripojenie na
PostgreSQL DB aj na pripojenie na REDIS ? nemam skusenosti s
pripojenim na viacere "zdroje" dat v jednej aplikacii.
nastavenie connection pool-u je default.
pre informaciu, pouzivanie JEDIS-u:
1.
RedisTemplate<String, String> redisTemplate = (RedisTemplate<String,
String>) BeanUtil.getBean("redisTemplate");
return redisTemplate.boundZSetOps(set).incrementScore(key , value);
2.
RedisTemplate<String, String> redisTemplate = (RedisTemplate<String,
String>) BeanUtil.getBean("redisTemplate");
Set<Tuple> mostViewed = redisTemplate.execute(new RedisCallback<Set<Tuple>>() {
@Override
public Set<Tuple> doInRedis(RedisConnection con)
throws DataAccessException {
Set<Tuple> zRangeByScoreWithScore =
con.zRangeByScoreWithScores(ARTICLE_VIEWS_SET.getB ytes(), 1, 10);
return zRangeByScoreWithScore;
}
});
---
jedisConnectionFactory definicia:
<bean id="jedisConnectionFactory"
class="org.springframework.data.redis.connection.j
edis.JedisConnectionFactory">
<property name="hostName" value="${redis.host}"/>
<property name="port" value="${redis.port}"/>
<property name="timeout" value="2000"/>
</bean>
dakujem za akekolvek rady
Ivan