玩java3年多了,仍然只敢在新手区发帖的人伤不起……
想找自信,就去面试别人,想立志,还是要在eye发帖子
先是Redis的bean定义,@Configuration大赞!xml都见鬼去!
@Configuration @PropertySource("classpath:mgr.properties") //@ImportResource("classpath*:spring-config.xml") public class RedisConf { @Value("${redis.url}") String redisUrl; @Value("${redis.port}") String redisPort; @Bean public JedisPoolConfig jedisPoolConfig(){ JedisPoolConfig jedisPoolConfig = new JedisPoolConfig(); jedisPoolConfig.setMaxActive(50); jedisPoolConfig.setMaxIdle(10); jedisPoolConfig.setMaxWait(1000l); jedisPoolConfig.setTestOnBorrow(true); return jedisPoolConfig; } @Bean public JedisShardInfo jedisShardInfo(){ return new JedisShardInfo(redisUrl, redisPort); } @Bean public ShardedJedisPool shardedJedisPool(){ List<JedisShardInfo> jedisList = new ArrayList<JedisShardInfo>(); jedisList.add(jedisShardInfo()); return new ShardedJedisPool(jedisPoolConfig(), jedisList); } @Bean public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer(){ return new PropertySourcesPlaceholderConfigurer(); } }
主要的@Configuration
@Configuration @Import(RedisConf.class) public class MgrConf {...}
Queue实现
public class JedisQueue<T> { private ShardedJedisPool shardedJedisPool; private String suffix = "_"; private String name; private Class<T> clazz; public JedisQueue(ShardedJedisPool shardedJedisPool, Class<T> clazz) { this.shardedJedisPool = shardedJedisPool; this.clazz = clazz; this.name = clazz.getName(); } public JedisQueue(ShardedJedisPool shardedJedisPool, Class<T> clazz, String suffix) { this.shardedJedisPool = shardedJedisPool; this.name = clazz.getName(); this.clazz = clazz; this.suffix += suffix; this.name += this.suffix; } public void push(T... ts) { ShardedJedis jedis = shardedJedisPool.getResource(); try { for (T t : ts) jedis.lpush(name, JsonUtils.toJson(t)); } finally { shardedJedisPool.returnResource(jedis); } } public void push(Collection<T> collection) { ShardedJedis jedis = shardedJedisPool.getResource(); try { for (T t : collection) jedis.lpush(name, JsonUtils.toJson(t)); } finally { shardedJedisPool.returnResource(jedis); } } public T take() { ShardedJedis jedis = shardedJedisPool.getResource(); try { while (true) { Threads.sleep(300l); if (!jedis.exists(name)) continue; String jsonT = jedis.rpop(name); if (jsonT != null) { return (T) JsonUtils.toT(jsonT, clazz); } } } finally { shardedJedisPool.returnResource(jedis); } } }
调用Queue
@Autowired public void init(ShardedJedisPool shardedJedisPool){ proxyQueue = JedisQueue.newQ(shardedJedisPool, Proxy.class); tiredQueue = JedisQueue.newQ(shardedJedisPool, Proxy.class, "tired"); }