1
0
frankeleyn 2 роки тому
батько
коміт
8124bff9e3

+ 1 - 0
build.gradle

@@ -91,6 +91,7 @@ repositories {
 }
 
 dependencies {
+    implementation 'org.springframework.boot:spring-boot-starter-data-redis:2.4.5'
     implementation 'cn.hutool:hutool-all:5.8.12'
     compileOnly group: 'org.projectlombok', name: 'lombok', version: '1.18.10'
     annotationProcessor group: 'org.projectlombok', name: 'lombok', version: '1.18.10'

+ 91 - 0
src/main/java/com/ematou/wxbase/config/RedisConfig.java

@@ -0,0 +1,91 @@
+package com.ematou.wxbase.config;
+
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.PropertyAccessor;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.springframework.cache.CacheManager;
+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;
+
+/**
+ * Redis配置类
+ *
+ */
+@Configuration
+@EnableCaching
+public class RedisConfig {
+
+    // 使用默认标签做缓存
+    @Bean
+    public KeyGenerator wiselyKeyGenerator() {
+        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 obj : params) {
+                    sb.append(obj.toString());
+                }
+                return sb.toString();
+            }
+        };
+    }
+
+    // 声明模板
+    @Bean
+    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
+        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
+        redisTemplate.setConnectionFactory(redisConnectionFactory);
+        Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
+        ObjectMapper objectMapper = new ObjectMapper();
+        objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
+        objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
+        jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
+
+        redisTemplate.setKeySerializer(new StringRedisSerializer());
+        redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
+        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
+        redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
+
+        redisTemplate.afterPropertiesSet();
+        return redisTemplate;
+    }
+
+    @Bean
+    public CacheManager cacheManager(RedisConnectionFactory factory) {
+        RedisSerializer<String> redisSerializer = new StringRedisSerializer();
+        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);
+
+        // 配置序列化(解决乱码的问题),过期时间600秒
+        RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
+                .entryTtl(Duration.ofSeconds(600))
+                .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer))
+                .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer))
+                .disableCachingNullValues();
+
+        RedisCacheManager cacheManager = RedisCacheManager.builder(factory)
+                .cacheDefaults(config)
+                .build();
+        return cacheManager;
+    }
+}

+ 8 - 0
src/main/resources/application.yml

@@ -7,12 +7,20 @@ wx:
     appSecret: 78413a82d0332ecbf7fdf475d0a8b08e
     grantType: client_credential
     url: https://api.weixin.qq.com/cgi-bin/token?grant_type=%s&appid=%s&secret=%s
+
 spring:
   datasource:
     driver-class-name: com.mysql.cj.jdbc.Driver
     username: wx_base
     password: goZ7ooGmxV
     url: jdbc:mysql://out-rm-wz92efl25x02n44xego.mysql.rds.aliyuncs.com:3306/wx_base?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
+  # redis 配置
+  redis:
+    database: 1
+    host: 120.78.152.8
+    port: 6379
+    password: Abc-123#*.-
+
 mybatis:
   mapper-locations: classpath:mybatis/*.xml
   configuration:

+ 6 - 1
src/test/java/com/ematou/wxbase/EidTokenTest.java

@@ -26,6 +26,7 @@ public class EidTokenTest {
 
     private final static String secretId = "AKIDIRYotrdCZnqkT0LTVzJSQFrGmLoALLJA";
     private final static String secretKey = "jICxWrJchWBg8RYO2RZYLwMXh0bR6imd";
+    private final static String merchId = "0NSJ2302171312018748";
 
     @Test
     public void getEidToken() {
@@ -42,11 +43,15 @@ public class EidTokenTest {
             FaceidClient client = new FaceidClient(cred, "", clientProfile);
             // 实例化一个请求对象,每个接口都会对应一个request对象
             GetEidTokenRequest req = new GetEidTokenRequest();
-
+            // 设置商户 id
+            req.setMerchantId(merchId);
+            req.setIdCard("431422196503217896");
+            req.setName("张三");
             // 返回的resp是一个GetEidTokenResponse的实例,与请求对象对应
             GetEidTokenResponse resp = client.GetEidToken(req);
             // 输出json格式的字符串回包
             System.out.println(GetEidTokenResponse.toJsonString(resp));
+            resp.getEidToken();
         } catch (TencentCloudSDKException e) {
             log.error("腾讯云 SDK Error", e);
         }

+ 31 - 0
src/test/java/com/ematou/wxbase/RedisTest.java

@@ -0,0 +1,31 @@
+package com.ematou.wxbase;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.data.redis.core.RedisTemplate;
+
+/**
+ * Redis 测试类
+ *
+ * @author frankeleyn
+ * @email lvjian@qhdswl.com
+ * @date 2023/2/20 15:35
+ */
+@SpringBootTest
+public class RedisTest {
+
+    @Autowired
+    private RedisTemplate<String, Object> redisTemplate;
+
+    @Test
+    public void testSet() {
+        redisTemplate.opsForValue().set("wcq", "1234556");
+    }
+
+    @Test
+    public void testDelete() {
+        redisTemplate.delete("lj_hh");
+    }
+
+}