代碼的連結位址:https://gitee.com/frostGG/springbooo_dubbo_demo.git
1、項目的目錄經構:
介紹:
這一個項目,用的是阿裡的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檔案裡面配置了:
是以可以跨服務調用。并且接口也是在服務端裡面配置掃描的。
細節決定成敗!個人愚見,如有不對,懇請扶正!