DB數據源之SpringBoot+MyBatis踏坑過程(一)html
liuyuhang原創,未經容許進制轉載java
系列目錄mysql
DB數據源之SpringBoot+Mybatis踏坑過程實錄(一)web
DB數據源之SpringBoot+MyBatis踏坑過程(二)手工配置數據源與加載Mapper.xml掃描spring
DB數據源之SpringBoot+MyBatis踏坑過程(三)手工+半自動註解配置數據源與加載Mapper.xml掃描sql
DB數據源之SpringBoot+MyBatis踏坑過程(四)沒有使用鏈接池的後果數據庫
DB數據源之SpringBoot+MyBatis踏坑過程(五)手動使用Hikari鏈接池api
DB數據源之SpringBoot+MyBatis踏坑過程(七)手動使用Tomcat鏈接池緩存
mysql鏈接查看tomcat
DB數據源之SpringBoot+MyBatis踏坑過程(六)mysql中查看鏈接,配置鏈接數量
1.體驗SpringBoot
筆者最近新入手的項目,正在使用Springboot,之前一直使用本身構建的架構,
可是感受SpringBoot的火爆程度,不得不去學習,畢竟後邊還有分佈式SpringCloud
即便是註冊中心閉源了(還有更多的解決方案不是麼)
入手之後,最開始以爲是十分方便的,在網上隨便找一篇入門的文章,半小時不到
就搭建起來了,來個Controller的HelloWorld,輕鬆完成。
感受SpringBoot好簡單的
次日就打臉,那些宣傳SpringBoot配置簡單的出來壓馬路的時候想啥呢都。。。
2.SpringBoot打臉
列舉一些遇到的問題概述
2.1.首先,SpringBoot是使用maven構建的,而我接手別人的電腦
根本沒找到maven配置path,也沒上網查,直接:
cmd maven -v,maven - v,maven -version ,maven - version四個命令下去,都是錯
(原諒我之前沒有怎麼動過maven)
問題不在因而否學過maven,是有太多問題沒有考慮過。
①myeclipse不一樣版本對於maven配置的隸屬關係是不一樣的,有些在maven主選項內
有些則是在MyEclipse下的Maven4MyEclipse內
②用maven居然是好使的,我覺得本機安裝並配置好了maven,然而MyEclipse自帶maven插件
③自帶插件的maven目錄居然很是的深,搜maven居然沒有,原來在系統盤用戶目錄下的 .m2下
注意,這裏有個英文的句號
④MyEclipse建立Maven項目的時候,會有選擇Catalogs的選項,版本衆多不說,沒有哪一個文章
仔細說明這個選擇的究竟是什麼,原來只是項目的構建模式而已,好比曾經有過的:
將project轉爲webProject,還有將webProject轉爲Hibernate項目這種
⑤MyEcplise建立Maven項目的時候,會有選擇Catalogs的選項,而該選項會有假死狀況,一直
去下載更新Catalogs,而因爲網絡或者節點或者未知的緣由,一直更新,一直更新失敗,
致使MyEclipse(Eclipse也試過)出現嚴重的內存泄漏(java8的更嚴重),而後就down了
⑥Maven的mirror問題。。。。不是阿里的庫能下到全部的東西,公司裏有個舊項目有mail的包,
阿里的庫就是下不成功,最後換成了默認的庫才成功
2.2.SpringBoot的加載依靠的是註解,和曾經的xml配置不一樣,這裏出現了好多個坑
①xml配置是要讀取該文件的,而是否讀取成功,有沒有讀取都有個報錯提示
②SpringBoot的默認註解配置,是否讀取咱們並不知道,有些註解是否工做咱們也不知道
③版本不一樣,註解內容不一樣,本質上走的仍是相同的東西,有些註解甚至取消了,或者一個拆成倆
④習慣優於配置,那習慣上爲啥parent中沒有各類starter,沒有mybatis
⑤pom引入的版本,既然不在parent中,引入的其餘東西要考慮版本,版本確實是個鬧心的東西
⑥pom中的build resource是否成功了,application.properties中的配置是否正確讀取了,一律不知
(固然並非沒有辦法驗證以上問題,只是曾經未曾想須要去驗證,通常性的忽略掉了)
還有一些其餘的小問題,如springboot中集成的是tomcat8,而創建maven項目中jsp爲什麼報錯
爲此額外引入了tomcat7,包衝突報錯。。。
java8和java7用的parent版本不一樣,版本不一樣註解配置不一樣,好傷心。。。
2.3.Mabatis的坑也很多,網上的你們的編碼方式和我平時的編碼方式都是徹底不一樣的
①別人的工做模式
給定架構之後要寫的代碼以下:
獲取sessionFactory
獲取session
獲取mapper接口
使用接口(或註解,或使用mapper.xml中的配置)
②個人工做模式
給定架構之後要寫的代碼以下:
從緩存中獲取單例sessionFactory的session(多線程狀況下調用多例的)
調用session原生api,傳mapper.xml的命名空間+id+參數
小項目,用不上事務,也不用mapper接口,也不用接口實現類,方便和代碼行數少,文件數少
可是沒有我這麼配置的啊(你們爲什麼如此趨同),之前用spring。xml配置的時候指定mapper掃描的包便可了
而用註解進行配置掃描,都是掃描mapper接口的,在application.properties中能夠配置xml的location
可是讓我十分失望(上述緣由,我根本不知道配置的location是否正確,仍是properties文件是否正確加載)
因而產生了如下幾個結果(不貼代碼,不貼報錯內容,省得別人喜歡抄襲)
①Mapped Statements collection does not contain value
這讓我做何感想,是mapper的引用命名空間錯了,仍是傳遞參數錯了,仍是mapper.xml壓根沒掃,
仍是sessionfactory沒有掃描mapper,仍是application.properties中location配置有錯,仍是配置文件沒加載
最後的結果居然是application.properties自己並無加載成功,因而網上找該文件加載,提供了三種方式:
一曰@value,二曰eviourment,三曰從SpringApplication的入口main函數中獲取context對象
三種都試了,三種都沒法加載,同名文章看了幾十個,看的我吐血
②null of url
從application.properties中獲取的url居然沒有?固然我是從某次數據源加載中出現這個錯誤判斷出來的
那個註解上的perfix幹啥去了,springboot啓動日誌中寫對了爲配置的包,然而說
「No MyBatis mapper was found in '[com.mapper]' package.」幾個意思?
爲了得到這個錯誤,我將mybatis的mapper.xml掃描寫到了java代碼中,寧肯進行全手寫配置了,
這樣才得出這個結論來。
說到底,由於什麼,說不清。
固然還有不少其餘結果,就不遠程公司電腦去截圖了,麻煩,也非重點
數據源的獲取蠻簡單個事情,爲了修改能夠從緩存,從網上,從集羣中獲取數據源,也能夠寫死,也能夠
寫到配置文件,寫到xml文件中
在此建議,若是springboot數據源上有坑的朋友們,
先寫死數據源,寫死mybatis配置,能讓項目繼續進行下去,再考慮springboot的優化配置模式
(我認爲沒啥用,只是你們都這麼用,做爲結果並沒有不一樣,領導永遠看不見你作的工做,又不是界面)
由於,項目給的時間仍是有限的,先進行下去,不是每一個項目都有集羣,都有分佈式,領導要你解釋代碼
因此,先搭好架構,不影響團隊繼續項目放第一位纔對。
說到底,雖然吐槽了不少,確定有我作的不對的地方,版本不熟悉,配置有錯誤的地方確定有
只是,處理這些問題居然讓我用掉了接近六個小時,有點鬧心啊!
3.仍是明天更吧,睡好覺纔不會死
明天繼續更,
①對於Springboot下用一個靠譜的方式得到application.properties配置文件,或其餘配置文件的內容
這個應該是個頗有用的內容
②對於Springboot下用一個靠譜的方式加載數據源,要事務管理的,繞道吧,我不想寫的那麼麻煩
(數據庫自己有事務管理,並非全部業務都是互聯網業務,也不是全部業務都是大型集羣數據庫操做)
因此,在目的上,任務的甘特圖應該是這樣的(圖難看對付看吧),我也在小公司哈,別吐槽。
|| -------到這裏的時候先讓架構能用,哪怕都寫死,接口和使用方式不變便可
|| -------今後開始作後續優化和更改,不影響其餘人工做纔對
我(處理springboot架構與工具封裝) || =====================================
A(處理web業務) ||===============================
C(處理DB業務) ||===============================
D(處理非web非DB架構) || =====================================
以上!休息!