DB數據源之SpringBoot+Mybatis踏坑過程實錄系列(一)

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架構)             || =====================================

 

 

 

以上!休息!

相關文章
相關標籤/搜索