目录
修复问题一般步骤:
1.看报错信息 (空指针or具体描述等)
2. 报错位置
先看描述!!!,再看位置!!!
debug 总结:
1.代码严谨,可能为null的地方注意判空
2.关键地方多输出日志会给查错 定位节省大部分时间
3.快速定位到出错的地方,不用凭经验想当然,要以debug出的出错位置为准
4.细心留意关键地方的数据变动
写代码避免bug注意点:
1.数组 实体要判空
2.查库 findby时确保数据唯一
3前后业务逻辑需要理清楚
bug记录
BUG1. mutrlpart 临时目录问题
bug描述:
linux 会隔十天删一下 tmp目录. 所以使用mutrilpart 文件上传时一定要记得 设置临时目录
解决方法:
1、重启服务,重新生成目录;
2、手动创建该目录;
3、在启动服务的main方法中,添加以下代码,指定上传文件的目录:
@Bean
MultipartConfigElementmultipartConfigElement() {
MultipartConfigFactory factory =new MultipartConfigFactory();
factory.setLocation("/data/apps/temp");
return factory.createMultipartConfig();
}
4、在应用的配置文件中添加以下配置,原理同3:
multipart tmp 目录配置(官方配置) 绝对路径 # spring.http.multipart.location=/apps/product/src/FileAssistant/multipartTmp/
BUG2: JPA中的SAVE问题
bug描述:
JPA中的 update 和insert 都是用save,如果 有id 就是update语句,无id就是insert.
此时 使用beanUtils ,一定要注意 id别带过来了
如果带过来,可能会把数据库以往的数据覆盖掉.
BUG3: Redis序列化问题
bug描述:
使用springredis中的默认RedisTemplate时, key的序列化方式默认是 jdk的OutObjectStream, 容易在key中产生乱码前缀, 导致后续修改读取困难,
甚至可能因为不同jdk版本导致序列化后的key有微小差异,导致分布式累加器失效.
解决办法:
使用自定义的RedisTemplate配置
@Bean(name = "myRedisTemplate")
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory);
// 使用Jackson2JsonRedisSerialize 替换默认序列化
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
objectMapper.registerModule(new JavaTimeModule());
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
// 设置value的序列化规则和 key的序列化规则
redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.afterPropertiesSet();
return redisTemplate;
}