Browse Source

Merge remote-tracking branch 'origin/main'

# Conflicts:
#	edu-travel-oauth/pom.xml
classic_blue 1 month ago
parent
commit
f0b905a261

+ 6 - 0
.idea/ApifoxUploaderProjectSetting.xml

@@ -2,5 +2,11 @@
 <project version="4">
   <component name="ApifoxUploaderProjectSetting">
     <option name="apiAccessToken" value="APS-zVX12fxhdOW93TBWYxvewP8rxF9dEXvJ" />
+    <option name="apiProjectIds">
+      <array>
+        <option value="&lt;byte-array&gt;rO0ABXNyADZjb20uaXRhbmdjZW50LmlkZWEucGx1Z2luLmFwaS5hY2NvdW50LlByb2plY3RBbmRNb2R1bGUAAAAAAAAAAQIAFVoABmVuYWJsZUwACG1vZHVsZUlkdAASTGphdmEvbGFuZy9TdHJpbmc7TAAGb3RoZXIxcQB+AAFMAAdvdGhlcjEwcQB+AAFMAAdvdGhlcjExcQB+AAFMAAdvdGhlcjEycQB+AAFMAAZvdGhlcjJxAH4AAUwABm90aGVyM3EAfgABTAAGb3RoZXI0cQB+AAFMAAZvdGhlcjVxAH4AAUwABm90aGVyNnEAfgABTAAGb3RoZXI3cQB+AAFMAAZvdGhlcjhxAH4AAUwABm90aGVyOXEAfgABTAAKcGF0aEJlZm9yZXEAfgABTAANcHJvamVjdEZvbGRlcnEAfgABTAAPcHJvamVjdEZvbGRlcklkcQB+AAFMAAlwcm9qZWN0SWRxAH4AAUwAC3Byb2plY3ROYW1lcQB+AAFMAAxzY2hlbWFGb2xkZXJxAH4AAUwACHNjaGVtYUlkcQB+AAF4cAB0AAZoaWRkZW5wcHBwcHBwcHBwcHB0AApwYXRoQmVmb3JldAANcHJvamVjdEZvbGRlcnQAD3Byb2plY3RGb2xkZXJJZHQAC3Byb2plY3ROYW1ldAAIaGlkZGVuSWR0AABxAH4ACQ==&lt;/byte-array&gt;" />
+      </array>
+    </option>
+    <option name="treeNodes" value="" />
   </component>
 </project>

+ 21 - 0
edu-travel-common/edu-travel-common-cache/pom.xml

@@ -22,6 +22,27 @@
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-data-redis</artifactId>
+            <exclusions>
+                <exclusion>
+                    <groupId>redis.clients</groupId>
+                    <artifactId>jedis</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>io.lettuce</groupId>
+                    <artifactId>lettuce-core</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>redis.clients</groupId>
+            <artifactId>jedis</artifactId>
+        </dependency>
+
+        <!--spring2.0集成redis所需common-pool2-->
+        <!-- 必须加上,jedis依赖此  -->
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-pool2</artifactId>
         </dependency>
         <!--redis end-->
         <!--cache start-->

+ 15 - 0
edu-travel-common/edu-travel-common-cache/src/main/java/edu/travel/cache/annotation/EnableRedis.java

@@ -0,0 +1,15 @@
+package edu.travel.cache.annotation;
+
+import edu.travel.cache.config.RedisConfig;
+import org.springframework.context.annotation.Import;
+import org.springframework.data.redis.connection.RedisConfiguration;
+
+import java.lang.annotation.*;
+
+@Target(ElementType.TYPE)
+@Retention(RetentionPolicy.RUNTIME)
+@Import(RedisConfig.class)
+@Documented
+@Inherited
+public @interface EnableRedis {
+}

+ 17 - 0
edu-travel-common/edu-travel-common-cache/src/main/java/edu/travel/cache/annotation/EnableRedisCache.java

@@ -0,0 +1,17 @@
+package edu.travel.cache.annotation;
+
+import edu.travel.cache.config.EduTravelCacheConfig;
+import org.springframework.cache.annotation.EnableCaching;
+import org.springframework.context.annotation.Import;
+import org.springframework.data.redis.cache.RedisCacheConfiguration;
+
+import java.lang.annotation.*;
+
+@Target(ElementType.TYPE)
+@Retention(RetentionPolicy.RUNTIME)
+@Import(EduTravelCacheConfig.class)
+@EnableCaching
+@Documented
+@Inherited
+public @interface EnableRedisCache {
+}

+ 76 - 26
edu-travel-common/edu-travel-common-cache/src/main/java/edu/travel/cache/config/EduTravelCacheConfig.java

@@ -7,39 +7,89 @@ import com.fasterxml.jackson.annotation.JsonTypeInfo;
 import com.fasterxml.jackson.annotation.PropertyAccessor;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator;
+import com.fasterxml.jackson.databind.module.SimpleModule;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.core.io.ClassPathResource;
+import org.springframework.data.redis.cache.RedisCacheConfiguration;
 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.RedisSerializer;
-import org.springframework.data.redis.serializer.StringRedisSerializer;
+import org.springframework.data.redis.core.script.DefaultRedisScript;
+import org.springframework.data.redis.core.script.RedisScript;
+import org.springframework.data.redis.listener.RedisMessageListenerContainer;
+import org.springframework.data.redis.serializer.*;
+import org.springframework.scripting.support.ResourceScriptSource;
 
 @Configuration
 public class EduTravelCacheConfig {
+//    @Autowired
+//    private RedisTemplate redisTemplate;
+//    @Autowired
+//    private RedisConnectionFactory redisConnectionFactory;
+    @Bean
+    public RedisCacheConfiguration redisCacheConfiguration(){
+        RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig();
+//设置redis缓存值的序列化方式,此处采用json方式序列化
+        redisCacheConfiguration = redisCacheConfiguration.
+                serializeValuesWith(RedisSerializationContext.SerializationPair.
+                        fromSerializer(new GenericJackson2JsonRedisSerializer()));
+        return redisCacheConfiguration;
+    }
+
 
-    @Bean(name = "redisTemplate")
-    public RedisTemplate<String, Object> getRedisTemplate(RedisConnectionFactory factory) {
-        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>();
-        redisTemplate.setConnectionFactory(factory);
-        RedisSerializer stringSerializer = new StringRedisSerializer();
-        redisTemplate.setKeySerializer(stringSerializer);
-        redisTemplate.setValueSerializer(stringSerializer);
-        redisTemplate.setHashKeySerializer(stringSerializer);
-        redisTemplate.setHashValueSerializer(stringSerializer);
-//        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
-//        ObjectMapper objectMapper = new ObjectMapper();
-//        // 使用Jackson序列化对象
-//        objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
-//        objectMapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance ,
-//                ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);
-//        jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
-//        jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
+
+//    @Bean
+//    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory factory) {
+//        redisTemplate.setConnectionFactory(factory);
+//        Jackson2JsonRedisSerializer<Object> serializer = new Jackson2JsonRedisSerializer<Object>(Object.class);
+//        redisTemplate.setDefaultSerializer(serializer);
+//        //设置序列化Key的实例化对象
+//        redisTemplate.setKeySerializer(new StringRedisSerializer());
+//        //设置序列化Value的实例化对象
+//        redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
 //
-//        redisTemplate.setValueSerializer(jackson2JsonRedisSerializer); // value的序列化类型
-//        redisTemplate.setHashKeySerializer(stringRedisSerializer);
-//        redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
-        redisTemplate.afterPropertiesSet();
-        return redisTemplate;
-    }
+//        return redisTemplate;
+//    }
+//
+//    @Bean
+//    public RedisMessageListenerContainer redisContainer() {
+//        final RedisMessageListenerContainer container = new RedisMessageListenerContainer();
+//        container.setConnectionFactory(redisConnectionFactory);
+//        return container;
+//    }
+//
+//    @Bean
+//    public RedisScript<Long> limitRedisScript() {
+//        DefaultRedisScript<Long> redisScript = new DefaultRedisScript<>();
+//        redisScript.setScriptSource(new ResourceScriptSource(new ClassPathResource("scripts/limit.lua")));
+//        redisScript.setResultType(Long.class);
+//        return redisScript;
+//    }
+
+
+//    @Bean(name = "redisTemplate")
+//    public RedisTemplate<String, Object> getRedisTemplate(RedisConnectionFactory factory) {
+//        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>();
+//        redisTemplate.setConnectionFactory(factory);
+//        RedisSerializer stringSerializer = new StringRedisSerializer();
+//        redisTemplate.setKeySerializer(stringSerializer);
+//        redisTemplate.setValueSerializer(stringSerializer);
+//        redisTemplate.setHashKeySerializer(stringSerializer);
+//        redisTemplate.setHashValueSerializer(stringSerializer);
+////        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
+////        ObjectMapper objectMapper = new ObjectMapper();
+////        // 使用Jackson序列化对象
+////        objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
+////        objectMapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance ,
+////                ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);
+////        jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
+////        jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
+////
+////        redisTemplate.setValueSerializer(jackson2JsonRedisSerializer); // value的序列化类型
+////        redisTemplate.setHashKeySerializer(stringRedisSerializer);
+////        redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
+//        redisTemplate.afterPropertiesSet();
+//        return redisTemplate;
+//    }
 }

+ 51 - 0
edu-travel-common/edu-travel-common-cache/src/main/java/edu/travel/cache/config/RedisConfig.java

@@ -0,0 +1,51 @@
+package edu.travel.cache.config;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.io.ClassPathResource;
+import org.springframework.data.redis.connection.RedisConnectionFactory;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.core.script.DefaultRedisScript;
+import org.springframework.data.redis.core.script.RedisScript;
+import org.springframework.data.redis.listener.RedisMessageListenerContainer;
+import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
+import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
+import org.springframework.data.redis.serializer.StringRedisSerializer;
+import org.springframework.scripting.support.ResourceScriptSource;
+
+@Configuration
+public class RedisConfig {
+    @Autowired
+    private RedisTemplate redisTemplate;
+    @Autowired
+    private RedisConnectionFactory redisConnectionFactory;
+
+    @Bean
+    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory factory) {
+        redisTemplate.setConnectionFactory(factory);
+        Jackson2JsonRedisSerializer<Object> serializer = new Jackson2JsonRedisSerializer<Object>(Object.class);
+        redisTemplate.setDefaultSerializer(serializer);
+        //设置序列化Key的实例化对象
+        redisTemplate.setKeySerializer(new StringRedisSerializer());
+        //设置序列化Value的实例化对象
+        redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
+
+        return redisTemplate;
+    }
+
+    @Bean
+    public RedisMessageListenerContainer redisContainer() {
+        final RedisMessageListenerContainer container = new RedisMessageListenerContainer();
+        container.setConnectionFactory(redisConnectionFactory);
+        return container;
+    }
+
+    @Bean
+    public RedisScript<Long> limitRedisScript() {
+        DefaultRedisScript<Long> redisScript = new DefaultRedisScript<>();
+        redisScript.setScriptSource(new ResourceScriptSource(new ClassPathResource("scripts/limit.lua")));
+        redisScript.setResultType(Long.class);
+        return redisScript;
+    }
+}

+ 0 - 5
edu-travel-oauth/pom.xml

@@ -75,10 +75,6 @@
             <artifactId>mybatis-plus-boot-starter</artifactId>
         </dependency>
         <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-data-redis</artifactId>
-        </dependency>
-        <dependency>
             <groupId>com.nimbusds</groupId>
             <artifactId>nimbus-jose-jwt</artifactId>
         </dependency>
@@ -132,7 +128,6 @@
             <groupId>edu.travel</groupId>
             <artifactId>edu-travel-common-cache</artifactId>
             <version>1.0-SNAPSHOT</version>
-            <scope>compile</scope>
         </dependency>
     </dependencies>
     <profiles>

+ 3 - 0
edu-travel-oauth/src/main/java/edu/travel/OauthServerApplication.java

@@ -1,5 +1,7 @@
 package edu.travel;
 
+import edu.travel.cache.annotation.EnableRedis;
+import edu.travel.cache.annotation.EnableRedisCache;
 import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
@@ -12,6 +14,7 @@ import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
 @SpringBootApplication
 @EnableDiscoveryClient
 @MapperScan("edu.travel.mapper")
+@EnableRedisCache
 public class OauthServerApplication
 {
     public static void main( String[] args )

+ 3 - 0
edu-travel-service/edu-travel-service-tenement/src/main/java/edu/travel/TenantApplication.java

@@ -1,5 +1,7 @@
 package edu.travel;
 
+import edu.travel.cache.annotation.EnableRedis;
+import edu.travel.cache.annotation.EnableRedisCache;
 import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
@@ -8,6 +10,7 @@ import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
 @SpringBootApplication
 @EnableDiscoveryClient
 @MapperScan("edu.travel.tenant.mapper")
+@EnableRedisCache
 public class TenantApplication {
     public static void main(String[] args) {
         SpringApplication.run(TenantApplication.class, args);

+ 1 - 1
edu-travel-service/edu-travel-service-tenement/src/main/java/edu/travel/tenant/filter/TokenAuthenticationFilter.java

@@ -24,7 +24,7 @@ import java.io.IOException;
 @Component
 public class TokenAuthenticationFilter extends OncePerRequestFilter {
     @Autowired
-    private RedisTemplate<String, Object> redisTemplate;
+    private RedisTemplate redisTemplate;
     @Override
     protected void doFilterInternal(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, FilterChain filterChain) throws ServletException, IOException {
         String token = httpServletRequest.getHeader("token");