今天是我實習的第十天,順利(其實一點也不順利)完成了上次描述的介面任務。在距離下班不到10分鐘的時候突然腦抽一下子,想啟動一下寫的專案。
其實都已經測試沒問題了,各個介面都是按預期輸出,結果突然專案就啟動失敗了
我瞬間傻眼開始瘋狂流汗:好特碼嚇人啊...
快速回想我都做了什麼:
1.把自己的分支提交到了dev分支,準備下週一來上公司伺服器測試;
2.把一些魔法值改成常量,然後把可能會變的常量寫入MySQL;
3.把一個不適用MySQL5.7的方法留在了xml。這個實在沒想起來
我去找大哥的時候其實已經6點了,大哥已經收拾準備下班了.....電腦都收拾好了,我當時很著急,因為這個bug不de我雙休會記得這個過得很不舒服,讓大哥幫我看看
離譜的是他一開始還不是報xml那個相關的錯誤
首先是我自己跑的時候,他告訴我找不到一個常量類:用一個表是用來存一些容易變動的常量,然後透過常量類的name去讀對應的value。我把一些appid、key塞了進去,然後我看了一圈也沒事...我就把我用的地方給退回魔法值,退回了居然還報這個錯,我就clean了一下然後又改回使用MySQL+快取這些常量的,居然就不報找不到這個bean了,進入下一階段....
說下面這兩個bean衝突了,但是他們倆其實都不在一個模組,大哥很疑惑,但他屈服了....把其中一個controller的name改成了controller1(大哥對不起,其實我也想早點下班)
com.ztesoft.bss.oc.prod.service.TestController
com.ztesoft.bss.oc.prod.server.controller.TestController
org.springframework.beans.factory.BeanDefinitionStoreException: Failed to parse configuration class [com.ztesoft.bss.oc.prod.service.OcProdServiceApplication]; nested exception is
org.springframework.context.annotation.ConflictingBeanDefinitionException: Annotation-specified bean name 'testController' for bean class
[com.ztesoft.bss.oc.prod.server.controller.TestController] conflicts with existing, non-compatible bean definition of same name and class [com.ztesoft.bss.oc.prod.service.TestController]
這裡大哥還在納悶,我之前都跑通了,只是把我的分支merge到另一個分支,這個分支就跑不通了.....我也納悶,並且我當時完全不記得我之前有改什麼不該改的內容。
改完了之後再重啟,又報了新的錯誤,說是載入不了一個依賴,依賴是pom裡帶的...這時我仔細想了想,當時pom因為一些縮排問題一直在commit裡掛著,我索性就把最開始的複製了一遍,然後什麼也沒點就關了。
這時大哥決定把所有模組都clean一下,然後重新編譯一遍...當時電腦沒插電,跑的很慢。大哥很急,我也很急。
再次執行的時候錯誤指向了我寫的一個xml裡的一段select,因為我們是5.7的MySQL,而這個裡面用了row_number() over(),我在網上搜這個方法是MySQL8.0才支援的(指的是over())所以把他保留了下來,特意標註了一下這個是MySQL8.0才用的...我和大哥說的時候他告訴我,8.0不開源,我們不會升級到8.0的。
關於我為什麼會用到這個方法,整體的思路是和隔壁組借鑑的,秉著能跑就不改的原則借鑑了他們的程式碼,我學了一個多小時學到了這個問題,然後把他變成了另一個腦鏟問題:(
<!-- 這是原方法,但是有當前MySQL版本不支援的函式 -->
<select id="listNetMessageIncludeXiaoMiWhenMysql8.0" resultType="com.ztesoft.bss.oc.prod.client.dto.llm.ImMessageDto"> SELECT </select>
最後我和大哥都晚下班半小時,希望我們都能有一個愉快的雙休