NutzCN Logo
问答 关于nutz与redis的集成
发布于 2918天前 作者 qq_6427b776 4053 次浏览 复制 上一个帖子 下一个帖子
标签: redis

我按着nutz.book的配置说明,从配置文件搭起redis.properties,redis.js,然后弄过滤器

1、弄过滤器

import org.nutz.aop.InterceptorChain;
import org.nutz.aop.MethodInterceptor;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

@IocBean(name = "redis")
public class RedisInterceptor implements MethodInterceptor {

@Inject
JedisPool jedisPool;

static ThreadLocal<Jedis> TL = new ThreadLocal<Jedis>();

@Override
public void filter(InterceptorChain chain) throws Throwable {
    if (TL.get() != null) {
       chain.doChain();
       return;
    }
    try (Jedis jedis = jedisPool.getResource()) {
       TL.set(jedis);
       chain.doChain();
    } finally {
       TL.remove();
    }
}

public static Jedis jedis() {
    return TL.get();
}

}

2、然后搞RedisService的ioc bean
3、最后其他service层引进的时候,
@Inject
private RedisService redisService;

redisService.get("XXXXXXX");

4、现在报空指针
@Aop("redis")
public void set(String key, String val) {
jedis().set(key, val);
}
jedis()这个对象为null

6 回复

插入代码的按钮加了颜色,依然不去按.

debug一下RedisInterceptor的filter方法

如果实在搞不定, 注入 jedisPool ,然后try-finally的方式用就好了

RedisInterceptor的filter方法的方法,没有debug到,为什么不走这里,是不是过滤器有问题?

我感觉是@Aop没生效

@wendal 应该是,为什么不生效呢?

最后发现@Aop没有生效的原因是老版本的$aop配置为json aop configure之后, 默认的@Aop就被覆盖了

添加回复
请先登陆
回到顶部