天天看點

Spring boot + mybatis + dubbo + zookeeper + mysql + mybatis-generator 一個小demo

代碼的連結位址:https://gitee.com/frostGG/springbooo_dubbo_demo.git

  1、項目的目錄經構:

Spring boot + mybatis + dubbo + zookeeper + mysql + mybatis-generator 一個小demo

   介紹:

    這一個項目,用的是阿裡的dubbo,和zookeeper,來進行分布式配置的,是以以上兩個沒有安裝的可以先去網上安裝一下,還有我自己用的這兩個是虛拟機上面的,你自己用的時候,可以改一下zookeeper的位址就行了。

  下面開始代碼:(新測可用的,可以直接複制下來就行了)

  父類pom檔案的依賴:

     <!--對全棧web開發的支援,包括Tomcat和 spring-webmvc-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</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-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>

        <!--lang 3-->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.4</version>
        </dependency>

        <!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>      

(上面所有的依賴,都是全項目都可以用的,所有提取出來放在這裡,其實前三個也可以不用加進來,把前三個加到服務端和用戶端裡面就行了)

下面是服務端的pom檔案 和 yml 檔案:

<dependency>
            <groupId>com.frost</groupId>
            <artifactId>student_entity</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>com.frost</groupId>
            <artifactId>student_api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>com.frost</groupId>
            <artifactId>student_mapper</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <!--Spring boot 和 dubbo 結和-->
        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>0.2.0</version>
        </dependency>

        <!--Zookeeper 開源用戶端-->
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>4.0.1</version>
        </dependency>

        <!--zookeeper-->
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.13</version>
        </dependency>              

(前面三個依賴是本項目中引入的依賴)

yml 檔案:

server:
  port: 10001

#配置日志
logging:
  level:
    com.frost: debug # 配置日志級别
  path: "D:/test" #配置日志輸出的檔案路徑

# dubbo 配置
dubbo:
  application:            #應用配置,用于配置目前應用資訊,不管該應用是提供者還是消費者。
    name: student-service
  registry:                 #注冊中心配置,用于配置連接配接注冊中心相關資訊。
    address: zookeeper://192.168.25.128:2181
  protocol:     #協定配置,用于配置提供服務的協定資訊,協定由提供方指定,消費方被動接受。
    name: dubbo
    port: 20880
  scan:
    base-packages: com.frost.service.impl
  version: 1.0.0

# Spring 配置
spring:
  application:
    name: student-service
  datasource:
    # mysql
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
    username: root
    password: root


# mybatis 配置
mybatis:
  # 映射檔案
  mapper-locations: classpath:mapper/*.xml
  # 實體婁
  type-aliases-package: com.frost.entity
  configuration:
    # 自動開啟大小寫轉換
    map-underscore-to-camel-case: true

# 分頁資訊
pagehelper:
  supportMethodsArguments: true
  reasonable: true
  helperDialect: mysql
  params: count=countSql      

下面是用戶端的pom檔案和yml檔案:

     <dependency>
            <groupId>com.frost</groupId>
            <artifactId>student_entity</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>com.frost</groupId>
            <artifactId>student_api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>com.frost</groupId>
            <artifactId>student_common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

        <!--分頁插件-->
        <!--<dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.2.10</version>
        </dependency>-->

        <!--Spring boot 和 dubbo 結和-->
        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>0.2.0</version>
        </dependency>

        <!--Zookeeper 開源用戶端-->
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>4.0.1</version>
        </dependency>

        <!--zookeeper-->
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.13</version>
        </dependency>      

(前三個也是本項目的依賴)

yml檔案:

server:
  port: 10002

# Spring 配置
spring:
  application:
    name: student-client

# dubbo 配置
dubbo:
  application:            #應用配置,用于配置目前應用資訊,不管該應用是提供者還是消費者。
    name: student-client
  registry:                 #注冊中心配置,用于配置連接配接注冊中心相關資訊。
    address: zookeeper://192.168.25.128:2181
  protocol:     #協定配置,用于配置提供服務的協定資訊,協定由提供方指定,消費方被動接受。
    name: dubbo
    port: 20880
  version: 1.0.0      

下面是資料通路層的pom依賴:

     <dependency>
            <groupId>com.frost</groupId>
            <artifactId>student_entity</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

        <!--mysql-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <!--分頁插件-->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.2.10</version>
        </dependency>
        <!--mybatis-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
        </dependency>
        <!--德魯依資料庫-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.6</version>
        </dependency>

        <!--日志-->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>      

代碼生成器的插件:

  <build>
        <plugins>
            <!--逆向工程-->
            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.3.2</version>
                <configuration>
                    <verbose>true</verbose>
                    <overwrite>false</overwrite>
                </configuration>
                <dependencies>
                    <!--mysql-->
                    <dependency>
                        <groupId>mysql</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <version>5.1.30</version>
                    </dependency>
                    <!--oracle-->
                    <!--<dependency>
                        <groupId>cn.easyproject</groupId>
                        <artifactId>ojdbc6</artifactId>
                        <version>12.1.0.2.0</version>
                    </dependency>-->
                </dependencies>
            </plugin>
        </plugins>
    </build>      
這裡其實有一個我以前的一篇:https://www.cnblogs.com/xdtg/p/11748028.html

  寫dubbo項目主要的注意點是:服務端裡面的 @service(version = "1.0.0")應該引用的是 dubbo提供的,不用spring boot 自己的,然後注入的時候,用@Reference(version = "1.0.0")來進行注入。加上版本号是防止報很多莫名其妙的錯誤!

  然後我自己感覺不好了解的地方是在服務端裡面掃描mapper接口,并且配置mybatis,這裡是因為在服務端裡面引入了持久層的東西,并且mybatis也支援多服務配置,并且還在yml檔案裡面配置了:

Spring boot + mybatis + dubbo + zookeeper + mysql + mybatis-generator 一個小demo

 是以可以跨服務調用。并且接口也是在服務端裡面配置掃描的。

  細節決定成敗!個人愚見,如有不對,懇請扶正!

繼續閱讀