java开发bug 总结 踩坑记录

目录

修复问题一般步骤:

debug 总结:

写代码避免bug注意点:

bug记录

BUG1. mutrlpart 临时目录问题   

BUG2: JPA中的SAVE问题


修复问题一般步骤:

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;
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章