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

 

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