|
@@ -6,24 +6,29 @@ import com.fasterxml.jackson.databind.ObjectMapper;
|
|
|
import com.qmth.themis.common.contanst.Constants;
|
|
|
import org.mybatis.spring.annotation.MapperScan;
|
|
|
import org.springframework.boot.SpringApplication;
|
|
|
-import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
|
|
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
|
|
import org.springframework.boot.autoconfigure.domain.EntityScan;
|
|
|
-import org.springframework.boot.autoconfigure.web.servlet.MultipartAutoConfiguration;
|
|
|
import org.springframework.cache.annotation.EnableCaching;
|
|
|
import org.springframework.context.annotation.Bean;
|
|
|
import org.springframework.context.annotation.ComponentScan;
|
|
|
import org.springframework.context.annotation.Primary;
|
|
|
+import org.springframework.data.redis.cache.RedisCacheConfiguration;
|
|
|
+import org.springframework.data.redis.cache.RedisCacheManager;
|
|
|
+import org.springframework.data.redis.cache.RedisCacheWriter;
|
|
|
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.StringRedisSerializer;
|
|
|
import org.springframework.scheduling.annotation.EnableAsync;
|
|
|
-import org.springframework.scheduling.annotation.EnableScheduling;
|
|
|
import org.springframework.transaction.annotation.EnableTransactionManagement;
|
|
|
import org.springframework.web.multipart.MultipartResolver;
|
|
|
import org.springframework.web.multipart.commons.CommonsMultipartResolver;
|
|
|
|
|
|
+import java.time.Duration;
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.Map;
|
|
|
+
|
|
|
@SpringBootApplication
|
|
|
@ComponentScan(basePackages = {"com.qmth.themis"})
|
|
|
@MapperScan("com.qmth.themis.business.dao")
|
|
@@ -53,6 +58,39 @@ public class ThemisExamApplication {
|
|
|
return resolver;
|
|
|
}
|
|
|
|
|
|
+ @Bean
|
|
|
+ public RedisCacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
|
|
|
+ return new RedisCacheManager(
|
|
|
+ RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory),
|
|
|
+ this.getRedisCacheConfigurationWithTtl(40 * 60), // 默认策略,未配置的 key 会使用这个
|
|
|
+ this.getRedisCacheConfigurationMap() // 指定 key 策略
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ private Map<String, RedisCacheConfiguration> getRedisCacheConfigurationMap() {
|
|
|
+ Map<String, RedisCacheConfiguration> redisCacheConfigurationMap = new HashMap<>();
|
|
|
+ redisCacheConfigurationMap.put("student:oauth:cache", this.getRedisCacheConfigurationWithTtl(2 * 60 * 60));//一个小时
|
|
|
+ redisCacheConfigurationMap.put("config:cache", this.getRedisCacheConfigurationWithTtl(24 * 60 * 60));
|
|
|
+ return redisCacheConfigurationMap;
|
|
|
+ }
|
|
|
+
|
|
|
+ private RedisCacheConfiguration getRedisCacheConfigurationWithTtl(Integer seconds) {
|
|
|
+ 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);
|
|
|
+
|
|
|
+ RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig();
|
|
|
+ redisCacheConfiguration = redisCacheConfiguration.serializeValuesWith(
|
|
|
+ RedisSerializationContext
|
|
|
+ .SerializationPair
|
|
|
+ .fromSerializer(jackson2JsonRedisSerializer)
|
|
|
+ ).entryTtl(Duration.ofSeconds(seconds));
|
|
|
+ return redisCacheConfiguration;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
@Bean
|
|
|
@Primary
|
|
|
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
|