在瞭解SpringBoot專案拆分之前首先我們需要了解微服務架構
什麼是微服務?
單個輕量級服務一般為一個單獨微服務,微服務講究的是 專注某個功能的實現,比如登入系統只專注於使用者登入方面功能的實現,講究的是職責單一,開箱即用,可以獨立執行。微服務架構系統是一個分散式的系統,按照業務進行劃分服務單元模組,解決單個系統的不足,滿足越來越複雜的業務需求。
馬丁福勒(Martin Fowler):就目前而言,對於微服務業界並沒有一個統一的、標準的定義。但通常而言,微服務架構是一種架構模式或者說是架構風格,它提倡將單一應用程式劃分成一組小的服務。每個服務執行在其獨立的自己的程序中服務之間相互配合、相互協調,為使用者提供最終價值。服務之間採用輕量級通訊。每個服務都圍繞具體業務進行構建,並能夠獨立部署到生產環境等。另外應儘量避免統一的、集中的服務管理機制。
通俗的來講:
微服務就是一個獨立的職責單一的服務應用程式。在 intellij idea 工具裡面就是用maven開發的一個個獨立的module,具體就是使用springboot 開發的一個小的模組,處理單一專業的業務邏輯,一個模組只做一個事情。
微服務強調的是服務大小,關注的是某一個點,具體解決某一個問題/落地對應的一個服務應用,可以看做是idea 裡面一個 module。
比如你去醫院:你的牙齒不舒服,那麼你就去牙科。你的頭疼,那麼你就去腦科。一個個的科室,就是一個微服務,一個功能就是一個服務。
微服務的優缺點是什麼?
優點:
松耦合,聚焦單一業務功能,無關開發語言,團隊規模降低。在開發中,不需要了解多有業務,只專注於當前功能,便利集中,功能小而精。微服務一個功能受損,對其他功能影響並不是太大,可以快速定位問題。微服務只專注於當前業務邏輯程式碼,不會和 html、css 或其他介面進行混合。可以靈活搭配技術,獨立性比較舒服。
缺點:
隨著服務數量增加,管理複雜,部署複雜,伺服器需要增多,服務通訊和呼叫壓力增大,運維工程師壓力增大,人力資源增多,系統依賴增強,資料一致性,效能監控
什麼是微服務架構?
微服務架構 就是 對微服務進行管理整合應用的。微服務架構 依賴於 微服務,是在微服務基礎之上的。
例如:上面已經列舉了什麼是微服務。在醫院裡,每一個科室都是一個獨立的微服務,那麼 這個醫院 就是 一個大型的微服務架構,就類似 院長 可以 對下面的 科室進行管理。微服務架構主要就是這種功能。
建立一個父專案
專案依賴咱們可以先不新增,專案建立完之後統一加入就好了
父專案pom檔案
然後我們需要注意的是需要更改父專案的pom檔案
在父級專案中的pom。xml檔案使用的packaging配置一定為pom。父級的pom檔案只作專案的子模組的整合,在
maven install
時不會生成
jar/war
壓縮包。
然後將打包外掛更改為
maven-compiler-plugin
建立子模組
在指定專案路徑的時候需要注意,需要加入到父專案路徑下
因為子專案是需要我們啟動的專案所以我們需要更新子專案pom檔案打包方式為jar
由於父專案僅需要對子專案進行管理,所以可以直接刪除掉父專案的src目錄,保留pom檔案即可
隨後我們分別建立 dao、model、service、common、admin 共5個子模組,其中admin模組作為我們的啟動專案,現在我們的目錄結構是這樣的
但現在父專案與子專案並無關係,子專案僅僅是在父專案目錄下而已,我們需要用maven將子專案交給父專案管理
父專案中引入子專案
子專案依賴父專案
在每個子專案都依賴父專案之後我們就可以在pom檔案中檢視到此時的父專案與子專案已經是相互依賴的關係了,如下圖
至此我們就可以新增pom檔案相關的依賴了,多專案拆分的情況下由父專案管理所有子專案的jar包版本,而父專案中引入的依賴子專案中不需要重複引入也可直接使用,所以我們在引入依賴時如果這個jar包在其他專案也需要使用到的話就可以直接寫到父專案的pom檔案中就可以了
以下是父專案的pom檔案
這裡我使用的是SQLSERVER資料庫,除了DAO層的專案,我們在common專案中也會對多資料來源、主從庫提供工具類,避免重複引入所以將資料庫驅動一併放在父專案中
而DAO層作為資料訪問層肯定需要連線資料庫進行操作的,現在我們著重檢視一下dao層的注意事項
DAO層依賴
DAO層專案中無非就是Mapper對映的介面以及Mapper。xml檔案,而資料庫驅動在父專案已經引入了,所以我們只需要引入Model專案即可
yml配置
spring: datasource: druid: username: username password: password driver-class-name: com。microsoft。sqlserver。jdbc。SQLServerDriver url: databaseUrl initial-size: 5 min-idle: 5 max-active: 20 aop: auto: true proxy-target-class: trueproject: version: ‘@project。version@’mybatis-plus: # resource目錄 classpath:/mapper/*Mapper。xml mapper-locations: classpath:/mapper/*Mapper。xml # 實體類 包掃描 type-aliases-package: com。youxue。demo。model global-config: db-config: db-type: sql_server #資料庫大寫下劃線轉換 #capital-mode: true configuration: # 資料庫關閉快取 cache-enabled: false # 開啟下劃線轉換駝峰命名 例 :(model String userName, SQL select user_name from userInfo) map-underscore-to-camel-case: true jdbc-type-for-null: ‘null’ # 開啟控制檯SQL列印 log-impl: org。apache。ibatis。logging。stdout。StdOutImpl
資料庫相關配置完成之後我們直接建立Mapper介面就行了,如下:
隨後在service專案中建立對應的service以及impl:
service層中我們需要依賴DAO層專案以及Model專案,並且可能會使用到一些工具類,所以還需要新增依賴:
因為我們的啟動專案為Admin專案,所以我們所有的Controller都放在這個專案
而Admin專案作為啟動專案,介面呼叫的響應結果肯定需要依賴Model層以及Service層,所以我們把依賴加入進來
這裡需要注意的是,Admin專案需要引入
spring-boot-starter-tomcat
來提供訪問支援
重點來了!!!!
啟動專案(踩過的坑)
@SpringBoot
註解,
@MapperScan
註解 的包掃描機制
大家肯定都知道,需要寫入對應的包路徑,此時我的Application是這樣的
是不是看起來有模有樣的,好像沒啥問題子專案相互依賴,各方面的引入也沒啥問題,然而啟動後:
啥玩意??? 資料庫url屬性沒有配置?咱們可是在DAO專案中配置的好好的,可是為啥這裡彷彿沒有用?
其實是因為沒有載入到DAO層專案的yml檔案,導致了啟動時無法識別到資料庫相關配置導致Spring丟擲了這個異常,那麼怎麼解決呢?
其實非常簡單,我們都知道SpringBoot是支援多配置檔案例如:
application-dev。yml
、
application-prod。yml
、
application-local。yml
我們需要在Admin啟動專案的配置檔案中引入DAO層專案的資料庫配置就行了
隨即專案啟動成功!是不是很棒,咱們來訪問一下Controller層的介面檢視一下效果
訪問時是不是感覺與單一架構差不多?然後我們其實已經將DAO、Service、Controller整個三層架構拆分為三個子專案,甚至將Model、Common都拆分為獨立的子專案,作者當前公司就是拆分成這樣的,是不是很細?
原文連結:https://mp。weixin。qq。com/s/_hpzQdfZWG3——CIiC44eCQ