1,RedisConfigContainer类读取redis配置信息 初始化StringRedisTemplate
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.listener.ChannelTopic;
import org.springframework.data.redis.listener.RedisMessageListenerContainer;
import org.springframework.data.redis.listener.adapter.MessageListenerAdapter;
import com.game.redis.container.MsgListener;
/**
* 配置默认Redis操作实例 到Spring中
*
*/
//@Component
//@PropertySource("classpath:application-test.yml")
//
@Configuration
@EnableCaching
public class RedisConfigContainer extends RedisConfig {
@Value("${spring.redis.redis-container.database}")
private int dbIndex;
@Value("${spring.redis.redis-container.host}")
private String host;
@Value("${spring.redis.redis-container.port}")
private int port;
@Value("${spring.redis.redis-container.password}")
private String password;
@Value("${spring.redis.redis-container.timeout}")
private int timeout;
/**
* 配置redis连接工厂
*
* @return
*/
public RedisConnectionFactory defaultRedisConnectionFactory() {
return createJedisConnectionFactory(dbIndex, host, port, password, timeout);
}
/**
* 配置redisTemplate 注入方式使用@Resource(name="") 方式注入
*
* @return
*/
@Bean(name = "redisTemplateContainer")
public StringRedisTemplate defaultRedisTemplate() {
StringRedisTemplate template = new StringRedisTemplate();
template.setConnectionFactory(defaultRedisConnectionFactory());
template.afterPropertiesSet();
return template;
}
/**
* 配置redis监听key消失
* @return
*/
@Bean
public RedisMessageListenerContainer container() {
RedisMessageListenerContainer container = new RedisMessageListenerContainer();
container.setConnectionFactory(defaultRedisConnectionFactory());
container.addMessageListener(messageListener(), new ChannelTopic("czd_setting_1"));//配置redis订阅
return container;
}
/**
* 配置redis订阅
* @return
*/
@Bean
MessageListenerAdapter messageListener() {
return new MessageListenerAdapter( new MsgListener() );//MsgListener需要自己创建
}
}
2 新建MsgListener 用户接受订阅信息
import org.apache.log4j.Logger;
import org.springframework.data.redis.connection.Message;
import org.springframework.data.redis.connection.MessageListener;
import org.springframework.stereotype.Component;
import com.game.monopoly.service.dare.czd.robot.CzdRobotService;
import com.game.msg.entity.SocketMessage;
import com.game.util.JsonTool;
@Component
public class MsgListener implements MessageListener {
protected final static Logger logger = Logger.getLogger(MsgListener.class);
/**
* 读取订阅消息
*/
@Override
public void onMessage(Message message, byte[] pattern) {
logger.info( "Message received: " + message.toString() );//打印信息
}
}
3 新建RedisSendMsg类用于发送信息
import javax.annotation.Resource;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
import com.game.msg.entity.SocketMessage;
import com.game.util.SpringManager;
@Component("redisSendMsg")
public class RedisSendMsg {
@Resource(name = "redisTemplateContainer")
private StringRedisTemplate redisTemplate;
public static RedisSendMsg util() {
return SpringManager.getBean(RedisSendMsg.class);
}
/**
* 发送订阅消息
* @param type
*/
public void sendMsg() {
redisTemplate.convertAndSend("czd_setting_1", "haha");
}
}
4 yml配置
redis:
pool:
max-active: -1
max-wait: -1
max-idle: 8
min-idle: 0
redis-container:
database: 3
host:ip
port: 6379
password: pwd
timeout: 0