日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

在了解SpringBoot項(xiàng)目拆分之前首先我們需要了解微服務(wù)架構(gòu)

什么是微服務(wù)?

單個(gè)輕量級(jí)服務(wù)一般為一個(gè)單獨(dú)微服務(wù),微服務(wù)講究的是 專注某個(gè)功能的實(shí)現(xiàn),比如登錄系統(tǒng)只專注于用戶登錄方面功能的實(shí)現(xiàn),講究的是職責(zé)單一,開箱即用,可以獨(dú)立運(yùn)行。微服務(wù)架構(gòu)系統(tǒng)是一個(gè)分布式的系統(tǒng),按照業(yè)務(wù)進(jìn)行劃分服務(wù)單元模塊,解決單個(gè)系統(tǒng)的不足,滿足越來越復(fù)雜的業(yè)務(wù)需求。

馬丁福勒(Martin Fowler):就目前而言,對(duì)于微服務(wù)業(yè)界并沒有一個(gè)統(tǒng)一的、標(biāo)準(zhǔn)的定義。但通常而言,微服務(wù)架構(gòu)是一種架構(gòu)模式或者說是架構(gòu)風(fēng)格,它提倡將單一應(yīng)用程序劃分成一組小的服務(wù)。每個(gè)服務(wù)運(yùn)行在其獨(dú)立的自己的進(jìn)程中服務(wù)之間相互配合、相互協(xié)調(diào),為用戶提供最終價(jià)值。服務(wù)之間采用輕量級(jí)通信。每個(gè)服務(wù)都圍繞具體業(yè)務(wù)進(jìn)行構(gòu)建,并能夠獨(dú)立部署到生產(chǎn)環(huán)境等。另外應(yīng)盡量避免統(tǒng)一的、集中的服務(wù)管理機(jī)制。

通俗的來講:

微服務(wù)就是一個(gè)獨(dú)立的職責(zé)單一的服務(wù)應(yīng)用程序。在 intellij idea 工具里面就是用maven開發(fā)的一個(gè)個(gè)獨(dú)立的module,具體就是使用springboot 開發(fā)的一個(gè)小的模塊,處理單一專業(yè)的業(yè)務(wù)邏輯,一個(gè)模塊只做一個(gè)事情。

微服務(wù)強(qiáng)調(diào)的是服務(wù)大小,關(guān)注的是某一個(gè)點(diǎn),具體解決某一個(gè)問題/落地對(duì)應(yīng)的一個(gè)服務(wù)應(yīng)用,可以看做是idea 里面一個(gè) module。

比如你去醫(yī)院:你的牙齒不舒服,那么你就去牙科。你的頭疼,那么你就去腦科。一個(gè)個(gè)的科室,就是一個(gè)微服務(wù),一個(gè)功能就是一個(gè)服務(wù)。

微服務(wù)的優(yōu)缺點(diǎn)是什么?

優(yōu)點(diǎn): 松耦合,聚焦單一業(yè)務(wù)功能,無關(guān)開發(fā)語言,團(tuán)隊(duì)規(guī)模降低。在開發(fā)中,不需要了解多有業(yè)務(wù),只專注于當(dāng)前功能,便利集中,功能小而精。微服務(wù)一個(gè)功能受損,對(duì)其他功能影響并不是太大,可以快速定位問題。微服務(wù)只專注于當(dāng)前業(yè)務(wù)邏輯代碼,不會(huì)和 html、css 或其他界面進(jìn)行混合。可以靈活搭配技術(shù),獨(dú)立性比較舒服。

缺點(diǎn): 隨著服務(wù)數(shù)量增加,管理復(fù)雜,部署復(fù)雜,服務(wù)器需要增多,服務(wù)通信和調(diào)用壓力增大,運(yùn)維工程師壓力增大,人力資源增多,系統(tǒng)依賴增強(qiáng),數(shù)據(jù)一致性,性能監(jiān)控

什么是微服務(wù)架構(gòu)?

微服務(wù)架構(gòu) 就是 對(duì)微服務(wù)進(jìn)行管理整合應(yīng)用的。微服務(wù)架構(gòu) 依賴于 微服務(wù),是在微服務(wù)基礎(chǔ)之上的。

例如:上面已經(jīng)列舉了什么是微服務(wù)。在醫(yī)院里,每一個(gè)科室都是一個(gè)獨(dú)立的微服務(wù),那么 這個(gè)醫(yī)院 就是 一個(gè)大型的微服務(wù)架構(gòu),就類似 院長(zhǎng) 可以 對(duì)下面的 科室進(jìn)行管理。微服務(wù)架構(gòu)主要就是這種功能。

創(chuàng)建一個(gè)父項(xiàng)目

項(xiàng)目依賴咱們可以先不添加,項(xiàng)目創(chuàng)建完之后統(tǒng)一加入就好了

 


 

父項(xiàng)目pom文件

然后我們需要注意的是需要更改父項(xiàng)目的pom文件

 

在父級(jí)項(xiàng)目中的pom.xml文件使用的packaging配置一定為pom。父級(jí)的pom文件只作項(xiàng)目的子模塊的整合,在maven install時(shí)不會(huì)生成jar/war壓縮包。

然后將打包插件更改為 maven-compiler-plugin

<build>
    <plugins>
        <plugin>
            <groupId>org.Apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <source>${JAVA.version}</source>
                <target>${java.version}</target>
         </configuration>
        </plugin>           
    <plugins>
<build>

創(chuàng)建子模塊

 


 

在指定項(xiàng)目路徑的時(shí)候需要注意,需要加入到父項(xiàng)目路徑下

因?yàn)樽禹?xiàng)目是需要我們啟動(dòng)的項(xiàng)目所以我們需要更新子項(xiàng)目pom文件打包方式為jar

<name>demo-dao</name>
<packaging>jar</packaging>
<artifactId>demo-dao</artifactId>
<version>0.0.1-SNAPSHOT</version>
<description>dao project</description>

由于父項(xiàng)目?jī)H需要對(duì)子項(xiàng)目進(jìn)行管理,所以可以直接刪除掉父項(xiàng)目的src目錄,保留pom文件即可

隨后我們分別創(chuàng)建 dao、model、service、common、admin 共5個(gè)子模塊,其中admin模塊作為我們的啟動(dòng)項(xiàng)目,現(xiàn)在我們的目錄結(jié)構(gòu)是這樣的

 

但現(xiàn)在父項(xiàng)目與子項(xiàng)目并無關(guān)系,子項(xiàng)目?jī)H僅是在父項(xiàng)目目錄下而已,我們需要用maven將子項(xiàng)目交給父項(xiàng)目管理

父項(xiàng)目中引入子項(xiàng)目

 

子項(xiàng)目依賴父項(xiàng)目

 

在每個(gè)子項(xiàng)目都依賴父項(xiàng)目之后我們就可以在pom文件中查看到此時(shí)的父項(xiàng)目與子項(xiàng)目已經(jīng)是相互依賴的關(guān)系了,如下圖

 

至此我們就可以添加pom文件相關(guān)的依賴了,多項(xiàng)目拆分的情況下由父項(xiàng)目管理所有子項(xiàng)目的jar包版本,而父項(xiàng)目中引入的依賴子項(xiàng)目中不需要重復(fù)引入也可直接使用,所以我們?cè)谝胍蕾嚂r(shí)如果這個(gè)jar包在其他項(xiàng)目也需要使用到的話就可以直接寫到父項(xiàng)目的pom文件中就可以了

以下是父項(xiàng)目的pom文件

<properties>
        <java.version>1.8</java.version>
        <lombok.version>1.18.20</lombok.version>
        <druid.version>1.1.18</druid.version>
        <MyBatis-plus.version>3.4.1</mybatis-plus.version>
        <swagger2.version>2.9.2</swagger2.version>
        <sqlserver.jdbc>7.2.2.jre8</sqlserver.jdbc>
</properties>

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.session</groupId>
            <artifactId>spring-session-data-redis</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>${lombok.version}</version>
        </dependency>

        <!--        ali數(shù)據(jù)源、mybatis-plus-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>${druid.version}</version>
        </dependency>

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>${mybatis-plus.version}</version>
        </dependency>


        <!--  SQL server 數(shù)據(jù)庫驅(qū)動(dòng)      -->
        <dependency>
            <groupId>com.microsoft.sqlserver</groupId>
            <artifactId>mssql-jdbc</artifactId>
            <version>${sqlserver.jdbc}</version>
            <scope>runtime</scope>
        </dependency>

        <!--  mybatis-plus  代碼生成器       -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>${mybatis-plus.version}</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-core</artifactId>
            <version>${mybatis-plus.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-engine-core</artifactId>
            <version>2.3</version>
        </dependency>

        <!--  swagger2      -->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>${swagger2.version}</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>${swagger2.version}</version>
        </dependency>
        <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>swagger-bootstrap-ui</artifactId>
            <version>1.9.0</version>
        </dependency>


</dependencies>

這里我使用的是SQLSERVER數(shù)據(jù)庫,除了DAO層的項(xiàng)目,我們?cè)赾ommon項(xiàng)目中也會(huì)對(duì)多數(shù)據(jù)源、主從庫提供工具類,避免重復(fù)引入所以將數(shù)據(jù)庫驅(qū)動(dòng)一并放在父項(xiàng)目中

而DAO層作為數(shù)據(jù)訪問層肯定需要連接數(shù)據(jù)庫進(jìn)行操作的,現(xiàn)在我們著重查看一下dao層的注意事項(xiàng)

DAO層依賴

<dependencies>
        <dependency>
            <groupId>com.youxue</groupId>
            <artifactId>demo-model</artifactId>
            <version>${project.version}</version>
        </dependency>
</dependencies>

<build>
      <plugins>
          <plugin>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-maven-plugin</artifactId>
          </plugin>
      </plugins>
</build>

DAO層項(xiàng)目中無非就是MApper映射的接口以及Mapper.xml文件,而數(shù)據(jù)庫驅(qū)動(dòng)在父項(xiàng)目已經(jīng)引入了,所以我們只需要引入Model項(xiàng)目即可

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: true

project:
  version: '@project.version@'

mybatis-plus:
  # resource目錄 classpath:/mapper/*Mapper.xml
  mapper-locations: classpath:/mapper/*Mapper.xml
  # 實(shí)體類 包掃描
  type-aliases-package: com.youxue.demo.model

  global-config:
    db-config:
      db-type: sql_server
      #數(shù)據(jù)庫大寫下劃線轉(zhuǎn)換
      #capital-mode: true
  configuration:
    # 數(shù)據(jù)庫關(guān)閉緩存
    cache-enabled: false
    # 開啟下劃線轉(zhuǎn)換駝峰命名 例 :(model  String userName, SQL  select user_name from userInfo)
    map-underscore-to-camel-case: true
    jdbc-type-for-null: 'null'
    # 開啟控制臺(tái)SQL打印
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

數(shù)據(jù)庫相關(guān)配置完成之后我們直接創(chuàng)建Mapper接口就行了,如下:

 

隨后在service項(xiàng)目中創(chuàng)建對(duì)應(yīng)的service以及impl:

 

service層中我們需要依賴DAO層項(xiàng)目以及Model項(xiàng)目,并且可能會(huì)使用到一些工具類,所以還需要添加依賴:

<dependencies>
        <dependency>
            <groupId>com.youxue</groupId>
            <artifactId>demo-common</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>com.youxue</groupId>
            <artifactId>demo-dao</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>com.youxue</groupId>
            <artifactId>demo-model</artifactId>
            <version>${project.version}</version>
        </dependency>
</dependencies>

因?yàn)槲覀兊膯?dòng)項(xiàng)目為Admin項(xiàng)目,所以我們所有的Controller都放在這個(gè)項(xiàng)目

 

而Admin項(xiàng)目作為啟動(dòng)項(xiàng)目,接口調(diào)用的響應(yīng)結(jié)果肯定需要依賴Model層以及Service層,所以我們把依賴加入進(jìn)來

這里需要注意的是,Admin項(xiàng)目需要引入spring-boot-starter-Tomcat來提供訪問支持

<dependencies>
     <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-tomcat</artifactId>
         <scope>provided</scope>
     </dependency>
     <dependency>
         <groupId>com.youxue</groupId>
         <artifactId>demo-model</artifactId>
         <version>${project.version}</version>
     </dependency>
     <dependency>
         <groupId>com.youxue</groupId>
         <artifactId>demo-service</artifactId>
         <version>${project.version}</version>
     </dependency>
</dependencies>

重點(diǎn)來了!!!!

啟動(dòng)項(xiàng)目(踩過的坑)

@SpringBoot注解,@MapperScan注解 的包掃描機(jī)制

大家肯定都知道,需要寫入對(duì)應(yīng)的包路徑,此時(shí)我的Application是這樣的

 

是不是看起來有模有樣的,好像沒啥問題子項(xiàng)目相互依賴,各方面的引入也沒啥問題,然而啟動(dòng)后:

 

啥玩意??? 數(shù)據(jù)庫url屬性沒有配置?咱們可是在DAO項(xiàng)目中配置的好好的,可是為啥這里仿佛沒有用?

其實(shí)是因?yàn)闆]有加載到DAO層項(xiàng)目的yml文件,導(dǎo)致了啟動(dòng)時(shí)無法識(shí)別到數(shù)據(jù)庫相關(guān)配置導(dǎo)致Spring拋出了這個(gè)異常,那么怎么解決呢?

其實(shí)非常簡(jiǎn)單,我們都知道SpringBoot是支持多配置文件例如:application-dev.yml、application-prod.yml、application-local.yml

我們需要在Admin啟動(dòng)項(xiàng)目的配置文件中引入DAO層項(xiàng)目的數(shù)據(jù)庫配置就行了

 


 

隨即項(xiàng)目啟動(dòng)成功!是不是很棒,咱們來訪問一下Controller層的接口查看一下效果

 

訪問時(shí)是不是感覺與單一架構(gòu)差不多?然后我們其實(shí)已經(jīng)將DAO、Service、Controller整個(gè)三層架構(gòu)拆分為三個(gè)子項(xiàng)目,甚至將Model、Common都拆分為獨(dú)立的子項(xiàng)目,作者當(dāng)前公司就是拆分成這樣的,是不是很細(xì)?

原文鏈接:
https://mp.weixin.qq.com/s/_hpzQdfZWG3--CIiC44eCQ

分享到:
標(biāo)簽:Spring Boot
用戶無頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定