Kaynağa Gözat

添加查询条件

黄远 5 yıl önce
ebeveyn
işleme
64439d026b

+ 110 - 0
lift-push-pc/src/main/java/cn/com/ty/lift/push/conf/RedisConfig.java

@@ -0,0 +1,110 @@
+package cn.com.ty.lift.push.conf;
+
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.PropertyAccessor;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
+import org.springframework.cache.CacheManager;
+import org.springframework.cache.annotation.CachingConfigurerSupport;
+import org.springframework.cache.annotation.EnableCaching;
+import org.springframework.cache.interceptor.KeyGenerator;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.data.redis.cache.RedisCacheConfiguration;
+import org.springframework.data.redis.cache.RedisCacheManager;
+import org.springframework.data.redis.connection.RedisConnectionFactory;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
+import org.springframework.data.redis.serializer.RedisSerializationContext;
+import org.springframework.data.redis.serializer.RedisSerializer;
+import org.springframework.data.redis.serializer.StringRedisSerializer;
+
+import java.lang.reflect.Method;
+import java.time.Duration;
+
+/**
+ * @author huangyuan
+ * @date 2020/5/29
+ * @description
+ */
+@Configuration
+@EnableCaching
+public class RedisConfig extends CachingConfigurerSupport {
+    /**
+     * 设置自动key的生成规则,配置spring boot的注解,进行方法级别的缓存
+     */
+    @Bean
+    @Override
+    public KeyGenerator keyGenerator() {
+        return new KeyGenerator() {
+            @Override
+            public Object generate(Object target, Method method, Object... params) {
+                StringBuilder sb = new StringBuilder();
+                sb.append(target.getClass().getName());
+                sb.append(method.getName());
+                for (Object param : params) {
+                    sb.append(param.toString());
+                }
+                return sb.toString();
+            }
+        };
+    }
+
+    /**
+     * 缓存管理
+     */
+    @SuppressWarnings({ "rawtypes", "unchecked" })
+    @Bean
+    public CacheManager cacheManager(RedisConnectionFactory factory) {
+        // 初始化缓存管理器
+        RedisSerializer<String> redisSerializer = new StringRedisSerializer();
+        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
+
+        //解决查询缓存转换异常的问题
+        ObjectMapper om = new ObjectMapper();
+        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
+        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
+        jackson2JsonRedisSerializer.setObjectMapper(om);
+
+        // 配置序列化(解决乱码的问题),过期时间30秒
+        RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
+                .entryTtl(Duration.ofSeconds(30))
+                .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer))
+                .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer))
+                .disableCachingNullValues();
+
+        RedisCacheManager cacheManager = RedisCacheManager.builder(factory)
+                .cacheDefaults(config)
+                .build();
+        return cacheManager;
+    }
+
+    @Bean("redisTemplate")
+    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory jedisConnectionFactory) {
+
+        Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
+        ObjectMapper om = new ObjectMapper();
+        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
+        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
+        jackson2JsonRedisSerializer.setObjectMapper(om);
+        //解决jackson2无法反序列化LocalDateTime的问题
+        om.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
+        om.registerModule(new JavaTimeModule());
+        // 配置redisTemplate
+        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
+        redisTemplate.setConnectionFactory(jedisConnectionFactory);
+        RedisSerializer<String> stringSerializer = new StringRedisSerializer();
+        // key序列化
+        redisTemplate.setKeySerializer(stringSerializer);
+        // value序列化
+        redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
+        // Hash key序列化
+        redisTemplate.setHashKeySerializer(stringSerializer);
+        // Hash value序列化
+        redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
+        redisTemplate.afterPropertiesSet();
+        return redisTemplate;
+
+    }
+}

+ 2 - 2
lift-push-pc/src/main/java/cn/com/ty/lift/push/websocket/config/WebSocketConfig.java

@@ -25,9 +25,9 @@ import java.util.concurrent.Executors;
 public class WebSocketConfig implements WebSocketConfigurer {
 
     @Resource
-    private TimeMessageService  timeMessageService;
+    private TimeMessageService timeMessageService;
 
-    @Resource
+    @Resource(name = "redisTemplate")
     private RedisTemplate redisTemplate;
 
     @Bean

+ 2 - 0
lift-push-pc/src/main/java/cn/com/ty/lift/push/websocket/config/WebSocketInterceptor.java

@@ -1,6 +1,7 @@
 package cn.com.ty.lift.push.websocket.config;
 
 import cn.com.ty.lift.common.constants.ApiConstants;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.http.server.ServerHttpRequest;
 import org.springframework.http.server.ServerHttpResponse;
 import org.springframework.http.server.ServletServerHttpRequest;
@@ -10,6 +11,7 @@ import org.springframework.web.socket.server.HandshakeInterceptor;
 import javax.servlet.http.HttpServletRequest;
 import java.util.Map;
 
+@Slf4j
 public class WebSocketInterceptor implements HandshakeInterceptor {
 
     /**

+ 6 - 0
lift-push-pc/src/main/java/cn/com/ty/lift/push/websocket/handler/TimeyMessageHandler.java

@@ -7,6 +7,7 @@ import cn.com.ty.lift.push.message.service.TimeMessageService;
 import cn.com.ty.lift.push.websocket.model.RealTimeMessage;
 import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.web.socket.*;
 
@@ -15,6 +16,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+@Slf4j
 public class TimeyMessageHandler implements WebSocketHandler {
 
     private TimeMessageService timeMessageService;
@@ -173,11 +175,15 @@ public class TimeyMessageHandler implements WebSocketHandler {
         String authToken = (String) session.getAttributes().get(ApiConstants.AUTHORIZATION_TOKEN);
         Object mobileUserInfo = redisTemplate.opsForValue().get(authToken);
         if (mobileUserInfo != null) {
+            log.error("用户手机信息有为:" + JSONUtil.parseObj(mobileUserInfo));
             Object userInfo = redisTemplate.opsForValue().get(mobileUserInfo);
             if (userInfo != null) {
                 Map<String, Object> currentUserInfoMap = JSONUtil.parseObj(userInfo);
+                log.error("用户信息是: " + JSONUtil.toJsonStr(currentUserInfoMap));
                 return (Long) currentUserInfoMap.get(ApiConstants.CURRENT_USER_ID);
             }
+        } else {
+            log.error("用户手机号信息为空,redis没有联通");
         }
         return null;
     }

+ 1 - 0
lift-push-pc/src/main/resources/application-prod.yml

@@ -18,6 +18,7 @@ spring:
         max-wait: 20000ms
         min-idle: 0
     timeout: 600000s
+  # activemq配置
   activemq:
     #ActiveMQ通讯地址
     broker-url: tcp://172.16.24.145:61616