|
@@ -3,28 +3,37 @@ package com.qmth.themis.backend;
|
|
|
import com.fasterxml.jackson.annotation.JsonAutoDetect;
|
|
|
import com.fasterxml.jackson.annotation.PropertyAccessor;
|
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
|
+import com.qmth.themis.backend.config.DictionaryConfig;
|
|
|
+import com.qmth.themis.business.constant.SystemConstant;
|
|
|
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.mongodb.repository.config.EnableMongoRepositories;
|
|
|
+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 javax.annotation.Resource;
|
|
|
+import java.time.Duration;
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.Map;
|
|
|
+
|
|
|
+//import org.springframework.data.mongodb.repository.config.EnableMongoRepositories;
|
|
|
+
|
|
|
@SpringBootApplication
|
|
|
@ComponentScan(basePackages = {"com.qmth.themis"})
|
|
|
@MapperScan("com.qmth.themis.business.dao")
|
|
@@ -40,6 +49,9 @@ public class ThemisBackendApplication {
|
|
|
SpringApplication.run(ThemisBackendApplication.class, args);
|
|
|
}
|
|
|
|
|
|
+ @Resource
|
|
|
+ DictionaryConfig dictionaryConfig;
|
|
|
+
|
|
|
/**
|
|
|
* 附件上传配置
|
|
|
*
|
|
@@ -55,6 +67,38 @@ public class ThemisBackendApplication {
|
|
|
return resolver;
|
|
|
}
|
|
|
|
|
|
+ @Bean
|
|
|
+ public RedisCacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
|
|
|
+ return new RedisCacheManager(
|
|
|
+ RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory),
|
|
|
+ this.getRedisCacheConfigurationWithTtl(SystemConstant.REDIS_DEFAULT_EXPIRE_TIME), // 默认策略,未配置的 key 会使用这个
|
|
|
+ this.getRedisCacheConfigurationMap() // 指定 key 策略
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ private Map<String, RedisCacheConfiguration> getRedisCacheConfigurationMap() {
|
|
|
+ Map<String, RedisCacheConfiguration> redisCacheConfigurationMap = new HashMap<>();
|
|
|
+ redisCacheConfigurationMap.put(dictionaryConfig.cacheConfigDomain().getUserOauth(), this.getRedisCacheConfigurationWithTtl(SystemConstant.REDIS_OAUTH_EXPIRE_TIME));
|
|
|
+ redisCacheConfigurationMap.put(dictionaryConfig.cacheConfigDomain().getConfigOauth(), this.getRedisCacheConfigurationWithTtl(SystemConstant.REDIS_EXPIRE_TIME));
|
|
|
+ return redisCacheConfigurationMap;
|
|
|
+ }
|
|
|
+
|
|
|
+ private RedisCacheConfiguration getRedisCacheConfigurationWithTtl(Long 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) {
|