今天有個朋友分享了一個不錯的問題以及解決的過程,我以爲挺有意思的,就記錄一下。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 就能夠了。