springboot的start.sh腳本里有特殊字符,致使jdbc鏈接不上

今天有個朋友分享了一個不錯的問題以及解決的過程,我以爲挺有意思的,就記錄一下。linux

linux上springboot啓動,鏈接不上數據庫報錯。
解決思路:
1)是否是數據庫自己有問題,客戶端登陸沒問題。算法

2)排查是否是war包問題,本地鏈接數據庫,沒問題。spring

3)是否是啓動參數有問題?由於多數據源的關係,在啓動參數裏配置了數據源跟驅動名
--spring.datasource.url=jdbc:dm://172.31.98.190:5236/DMSERVER \
--spring.datasource.driverClassName=dm.jdbc.driver.DmDriver \
檢查了下,沒任何問題。數據庫

4)是否是有特殊字符?
用vi -b start.sh查看了啓動腳本,並未發現^M這樣的特殊字符。vim

5)去除啓動參數,將啓動參數寫死放到application.properties中,從新打包,上傳上去,./start.sh,啓動居然不報錯了。windows

6)回頭再檢查這兩行參數,將參數逐行刪除,再手動打上去,定位到參數行
--spring.datasource.driverClassName=dm.jdbc.driver.DmDriver \
將DmDriver 後的空格刪除,再從新手動打個空格,:wq保存,重啓啓動,成功。springboot

7)爲何?懷疑是隱藏字符。app

8)按照隱藏字符的思路去百度了下,看還有什麼方法能夠查看linux上的隱藏字符。找到了個命令,cat -A。
cat -A start.sh運維

發現信息以下
--spring.datasource.url=jdbc:dm://172.31.98.190:5236/DMSERVERM-BM- \$
--spring.datasource.driverClassName=dm.jdbc.driver.DmDriverM-BM- \$url

多了M-BM-這串特殊字符,真相大白。

9)M-BM-是什麼特殊字符?哪位大神能告訴我下?我關鍵字只搜索到了BM算法,這是一個查找替換算法,另外還搜到了個帖子,說放在oneNote裏再貼出來也出現這個問題。因此猜想是運維人員在windows上批量替換數據庫參數致使。

 

其餘人討論的比較有意義的地方記錄:

cat -v也能夠的。

腳本文件的格式是unix,vim 看看 :set ff 顯示 fileformat=unix

:set ff=unix是設置成unix,那:set ff是文件當前格式。

針對^M的時候,能夠  :set ff=unix 就能夠了。

相關文章
相關標籤/搜索