目錄
修復問題一般步驟:
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;
}