Java後臺亂碼大坑

    2019年11月18號來浙江給一個項目做維護,其中做一個報表功能(這個項目我幾乎全在做報表),然後今天2020年1月7日,客戶反饋一個報表的導出功能不能用。

  隨即,我立刻用本機的代碼測試了一下,導出功能是可以用的,然後項目經理兼技術老大M則給我說可能是我打包打漏了或不完整,好吧,確實這有可能,畢竟現在維護的是一個Web項目,技術老但項目很大(是給一個省服務的項目,數據也大),所以這邊項目組是每寫好一個模塊就把那個模塊打成Jar包發給另一位同事L更新到線上項目,而我是用IDEA的,發現給Web項目的單個class文件或jsp打包是不會自動生成文件所在的目錄的,只能自己手動創建目錄,而他們用myeclipse打包卻能自動給單個文件生成其中的目錄,如下圖。在這裏插入圖片描述
  所以過來的開始一段時間,我是直接把寫好的代碼更新到SVN再找一位同事把改好的代碼拉取下來,再讓他用myeclipse打包;但總這樣別人也會覺得麻煩,後面我就自己用IDEA把整個項目打包就要完整的路徑了,然後把項目裏面的其他文件全刪除只留下我自己改的那幾個文件。
在這裏插入圖片描述
  因此,這次本機有導出文件有數據而線上導出的Excel文件卻沒有數據,我和項目老大的第一想法都是打包有問題,然後到了下班時間重新打包,發現線上的項目還是導出沒有數據,負責更新線上項目的同事L則說你是不是少打包了,我又和他覈對了我改的功能,確實沒少打啊,打包又折騰了幾下還是不行,最後直接把整個模塊更新,線上的項目打出還是沒數據。。。
在這裏插入圖片描述
  同時L則開始懷疑,是不是線上的數據表結構之類的你沒更新,我又一想這也不對啊,數據都能查出來不可能還導不出來的啊,然後我們用本地代碼連接到正式庫卻可以導出數據,那麼這就排除了數據表結構的問題。

  然後同事L把那幾個文件的代碼拉到自己本機測試,導出功能也是可以的,那麼代碼應該是沒問題,爲什麼線上的功能卻不起作用呢?同時L開始懷疑是不是自己沒更新出來?並開始清除緩存,但又發現一次更新多個文件,其他功能都起效了,唯獨我的導出功能有問題呢?而線下測試又是可以的,緩存之類的也清了,爲何線上就是不可以呢?

在這裏插入圖片描述
  隨即,同事L開始請教已經下班回家的技術老大M,老大M說,你們線下功能沒問題,數據庫也沒問題,更新也確實更新上去了,功能卻依然不出來,而且全部代碼都在try{}catch{}裏也沒拋出,網頁前端F12也沒出錯,那麼就把把導出功能的SQL語句和方法全打樁再發布到正式環境,看看是不是哪個方法沒進去或者SQL語句有問題?

  這時,我重新審視了我的代碼,發現之前做這個導出功能時,看到以前別人做的導出報表從前端獲取的中文查詢條件傳到後臺都會亂碼,

"rep_period" : "上半年"     //從前臺傳過來的這個查詢條件是亂碼的

而別人做的導出功能裏都沒對這個亂碼做改正,導致線下的導出功能都是導不出數據的。我當時做導出功能時還把這個問題向老大M反映過,他也說自己在線下測試確實導不出,但爲什麼線上的客戶沒人向我反映呢?告訴我可能是這個功能太少人用了吧?就叫我自己把那些亂碼改正。我改了幾個報表,發現有十多個報表都沒做亂碼改正而且也不是我寫的方法,憑什麼要我改呢?況且也確實沒客戶反應這個錯誤,所以我也就沒改,只把自己做的導出功能的查詢條件亂碼改過來了…
在這裏插入圖片描述
  現在我做的這個報表上線卻導出的文件裏沒有數據,我突然想到是不是線上的項目會自動把中文亂碼轉換成正確的?而我已經轉換成中文反而又會再次轉換爲亂碼?最後,在正式環境的打樁輸出中看到了SQL語句裏確實有亂碼,這就證明了我的猜測是正確的,線上的項目會自動將亂碼轉換,而我已經轉換正確的中文反而會添亂, 隨即,我把我的代碼改回來,不做亂碼處理,就讓它繼續亂碼,再更新到線上項目,發現導出的文件終於有數據了。
在這裏插入圖片描述
  線上的項目竟然會自己進行轉換,這什麼SB項目?還有這種機制,而且這個問題我當時做的時候還問了老大M的,他竟然也不知道這個問題嗎?要麼就是線上的項目有某種配置文件描述了進行轉換,而我拉取的項目裏卻沒有這個配置文件?

  就這一個渣渣轉換機制,讓我和同事L用了3個小時來排查問題。

  最後,我終於想通了,繼續呆着這個項目或做維護項目的工作是沒前途的,完全不熟悉整個項目,而且對熟悉開發歷程毫無幫助,所以還是打算搞完這個項目就去辭職。

                                                                                                                                                2020-01-07

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