這幾天在學習springboot的微服務項目,在配置文件方面也想嘗試下新的yml配置,就想把原來項目properties寫的文件轉換成yml試一下(老項目是之前檢出在了eclipse里面),結果寫好了yml配置文件,項目啟動時候報了如下錯誤:
Exception in thread "main" while scanning for the next token
found character '\t(TAB)' that cannot start any token. (Do not use \t(TAB) for indentation)
in 'reader', line 9, column 3:
dubbo:
^
at org.yaml.snakeyaml.scanner.ScannerImpl.fetchMoreTokens(ScannerImpl.java:420)
at org.yaml.snakeyaml.scanner.ScannerImpl.checkToken(ScannerImpl.java:226)
.......
原因是因為我在yml配置文件中用了Tab鍵來縮進,所以導致spring啟動讀取yml配置文件不能正確讀取。
注意我在上面標紅的地方,yml配置中使用Tab來縮進確實不符合yml的語法規則,但是我試了一下在另一個開發工具IDEA中yml配置使用Tab來縮進項目啟動是沒有報錯的,可能是是IDEA開發工具比較厲害的一點,不過我們還是要注意盡量不要使用Tab來縮進。
還有很多類似的啟動報錯,很可能就是你的yml配置文件里面有問題,這個時候我們就要仔細檢查下yml文件書寫是否符合規范,貼一個YAML語言教程地址:http://www.ruanyifeng.com/blog/2016/07/yaml.html?f=tt 里面有寫yml文件的語法規則,大家可以去看看。
上面是可以從代碼報錯中看出,當時我的項目中報錯如下:
Caused by: org.yaml.snakeyaml.scanner.ScannerException: while scanning a simple key
in 'reader', line 7, column 3:
serviceUrl.defaultZone:http://lo ...
^
could not find expected ':'
in 'reader', line 7, column 55:
... ne:http://localhost:8080/eureka/
^
改正方法:yml文件中key: value,在value之前加上空格,我的代碼是eureka.client.serviceUrl.defaultZone: http://localhost:8080/eureka/
ok