当前位置:网站首页>internship:其他配置类的编写
internship:其他配置类的编写
2022-07-27 13:57:00 【ahyo】
整体的项目架构相比之前写的demo多了其他的配置,比如涉及硬件,需要编写有关于硬件的代码;涉及遥感获取地理信息需要编写引用高德api来实现;此外还有其他一些零零碎碎需要编写的功能,使整个项目体系更为完整。但是唯一不变的还是 controller service及其对应的实现类 之后对应另一个service层 编写相应的mapper,最开始的都是打框架。
RedisConfig:
/** * redis配置 @EnableCaching @Configuration public class RedisConfig extends CachingConfigurerSupport { /** * 生成key的策略 */
@Bean
@Override
public KeyGenerator keyGenerator() {
return (target, method, params) -> {
StringBuilder sb = new StringBuilder();
sb.append(method.getName());
for (Object obj : params) {
sb.append("_").append(obj.toString());
}
return sb.toString();
};
}
/** * 缓存管理器 */
@Bean
public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
RedisSerializer<String> redisSerializer = new StringRedisSerializer();
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = jackson2JsonRedisSerializer();
RedisCacheConfiguration redisCacheConfiguration =
RedisCacheConfiguration.defaultCacheConfig()
.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer))
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer))
.entryTtl(Duration.ofHours(1));
return RedisCacheManager
.builder(RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory))
.cacheDefaults(redisCacheConfiguration).build();
}
/** * RedisTemplate配置 */
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
RedisTemplate<String, Object> template = new RedisTemplate<>();
template.setConnectionFactory(factory);
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = jackson2JsonRedisSerializer();
//序列化 value 时使用此序列化方法
template.setValueSerializer(jackson2JsonRedisSerializer);
template.setHashValueSerializer(jackson2JsonRedisSerializer);
// 序列化 key 时
StringRedisSerializer srs = new StringRedisSerializer();
template.setKeySerializer(srs);
template.setHashKeySerializer(srs);
template.afterPropertiesSet();
return template;
}
public Jackson2JsonRedisSerializer jackson2JsonRedisSerializer() {
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
jackson2JsonRedisSerializer.setObjectMapper(new ObjectMapper()
.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY)
//解决jackson2无法反序列化LocalDate、 LocalDateTime的问题
.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)
.registerModule(new JavaTimeModule())
//设置存入缓存时按具体的类型存入
.activateDefaultTyping(LaissezFaireSubTypeValidator.instance,
ObjectMapper.DefaultTyping.NON_FINAL,
JsonTypeInfo.As.WRAPPER_ARRAY));
return jackson2JsonRedisSerializer;
}
}
WebMvcConfigurer配置类其实是Spring内部的一种配置方式,采用JavaBean的形式来代替传统的xml配置文件形式进行针对框架个性化定制,可以自定义一些Handler,Interceptor,ViewResolver,MessageConverter。基于java-based方式的spring mvc配置,需要创建一个配置类并实现WebMvcConfigurer 接口;
webconfig:
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Value("${server.file-upload-path}")
private String filePath;
/** * * @param registry */
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOriginPatterns("*")
.allowedHeaders("*")
.allowedMethods("*")
.allowCredentials(true);
}
/** * 静态路径 * @param registry */
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
//在默认"/**"静态文件映射上添加"file: filePath/"
registry.addResourceHandler("/**").addResourceLocations("classpath:/static/", "/","file:" + filePath);
}
/** * 文件上传临时目录 * @return */
@Bean
MultipartConfigElement multipartConfigElement() {
MultipartConfigFactory factory = new MultipartConfigFactory();
String tmpPath = filePath + File.separator + "temp" + File.separator;
File file = new File(tmpPath);
if (!file.exists()) {
file.mkdirs();
}
factory.setLocation(tmpPath);
return factory.createMultipartConfig();
}
}
边栏推荐
- 一文搞懂 Redis 架构演化之路
- Why is there no unified quotation for third-party testing fees of software products?
- Navicate reports an error access violation at address 00000000
- 2022年中国网络视频市场年度综合分析
- 如何帮助企业优化Office管理
- Failed to connect to ResourceManager
- Research on multi label patent classification based on pre training model
- lc marathon 7.26
- idea打jar包与引入jar包
- 腾讯二面:@Bean 与 @Component 用在同一个类上,会怎么样?
猜你喜欢

DVWA全级别通关教程

Graphic SQL of giant image

Rtl8762dk environment construction (I)

Chinese character style transfer --- antagonistic discriminative domain adaptation (L1)

终于有人把面试必考的动态规划、链表、二叉树、字符串全部撸完了

FPGA时序约束分享04_output delay 约束

在Oracle VirtualBox中导入Kali Linux官方制作的虚拟机

JS what is declaration in advance? The order of function and variable declaration in advance (the foreshadowing of execution context)

Ten thousand words detailed Google play online application standard package format AAB

Docker practical experience: deploy mysql8 master-slave replication on docker
随机推荐
Unityui aspect processing (induction and accumulation)
一篇文章看懂JS执行上下文
股票买卖4
Getting started with DirectX
Research on Chinese idiom metaphorical knowledge recognition and relevance based on transfer learning and text enhancement
Why is there no unified quotation for third-party testing fees of software products?
[medical industry] DICOM converter tools
[cache series] completely solve the problems of cache avalanche, breakdown and penetration
【科普】精度和分辨率的区别与联系
Basic exercises of C language
Win11壁纸变黑怎么办?Win11壁纸变黑了的解决方法
Understand the evolution of redis architecture in one article
视觉系统设计实例(halcon-winform)-9.文字显示
Txt replace line breaks with spaces or cancel line breaks
@Repository详解
codeforces 1708E - DFS Trees
STM32F103C8T6在Arduino框架下驱动ssd1306 0.96“ IIC OLED显示
Passive income: return to the original and safe two ways to earn
如果我们是那晚负责修复 B 站崩了的开发人员
终于有人把面试必考的动态规划、链表、二叉树、字符串全部撸完了