順便學(xué)習(xí)一下springboot如何搭建分模塊項(xiàng)目
創(chuàng)建分模塊springboot
-
先創(chuàng)建一個(gè)springboot的空項(xiàng)目然后刪除無關(guān)文件
image.png - 修改pom文件,引入所需依賴(dubbo,zkclient)
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.xun</groupId>
<artifactId>dubbo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging><!--設(shè)置打包方式為pom-->
<name>dubbo</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.2.RELEASE</version>
<relativePath/>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<!-- 1.模塊管理 -->
<modules>
<module>provider</module>
<module>consumer</module>
</modules>
<dependencies>
<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>
<!-- 2.引入dubbo和zookeeper依賴 -->
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>0.1.0</version>
</dependency>
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
-
然后創(chuàng)建模塊
image.png
創(chuàng)建之后項(xiàng)目結(jié)構(gòu)如圖:
image.png - 至此,我們的分模塊項(xiàng)目已經(jīng)基本創(chuàng)建完成
各個(gè)模塊之間的依賴關(guān)系
- 接下來說下各個(gè)模塊之間的依賴關(guān)系
consumer --> provider
consumer 和 provier 又同時(shí)依賴于父pom【dubbo】 - ok理清依賴關(guān)系開始配置我們的各個(gè)模塊
依賴配置
- 最外層pom.xml作為我們所有模塊的父pom打包方式要是pom類型,上邊配置中已經(jīng)說明
- 配置provider模塊,需要繼承父pom
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.xun</groupId>
<artifactId>provider</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>provider</name>
<description>Demo project for Spring Boot</description>
<!-- 1.繼承父類pom -->
<parent>
<groupId>com.xun</groupId>
<artifactId>dubbo</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
</project>
- 配置consumer模塊,需要繼承父pom并且要引入provider依賴
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.xun</groupId>
<artifactId>consumer</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>consumer</name>
<description>Demo project for Spring Boot</description>
<!-- 1.繼承父pom -->
<parent>
<groupId>com.xun</groupId>
<artifactId>dubbo</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<dependencies>
<!-- 2.引入服務(wù)接口依賴 -->
<dependency>
<groupId>com.xun</groupId>
<artifactId>provider</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
- ok依賴配置完成,接下來就開始擼代碼了
配置dubbo配置
- provider模塊dubbo配置
server:
port: 8081
dubbo:
#應(yīng)用配置,用于配置當(dāng)前應(yīng)用信息,不管該應(yīng)用是提供者還是消費(fèi)者
application:
name: provider
#注冊(cè)中心配置,用于配置連接注冊(cè)中心相關(guān)信息
registry:
address: zookeeper://39.106.149.250:2182
#協(xié)議配置,用于配置提供服務(wù)的協(xié)議信息,協(xié)議由提供方指定,消費(fèi)方被動(dòng)接受
protocol:
name: dubbo
port: 20880
#掃描包
scan:
base-packages: com.xun.provider.service
- consumer模塊dubbo配置
server:
port: 8082
dubbo:
application:
name: consumer
registry:
address: zookeeper://39.106.149.250:2182
protocol:
name: dubbo
port: 20880
業(yè)務(wù)代碼層
- 需要在程序入口的main方法添加@EnableDubbo注解開啟dubbo
@SpringBootApplication
@EnableDubbo
public class ProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ProviderApplication.class, args);
}
}
- 服務(wù)接口編寫
在provider模塊下創(chuàng)建service包并編寫接口代碼
這里只提供接口實(shí)現(xiàn)類了
注意@Service注解要導(dǎo)入alibaba的包
package com.xun.provider.service.impl;
import com.alibaba.dubbo.config.annotation.Service;
import com.xun.provider.service.UserService;
@Service
public class UserServiceImpl implements UserService {
@Override
public String getUser() {
return "你好,DUBBO";
}
}
- 消費(fèi)者業(yè)務(wù)代碼編寫
在consumer模塊下創(chuàng)建controller包并編寫接口代碼
注意這是使用@Reference注入
package com.xun.consumer.controller;
import com.alibaba.dubbo.config.annotation.Reference;
import com.xun.provider.service.UserService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
@Reference
private UserService userService;
@GetMapping("/getUser")
public String getUser(){
return userService.getUser();
}
}
-
編譯
image.png
注意順序是 1.dubbo 2.provider 3.consumer
運(yùn)行測(cè)試
- 項(xiàng)目啟動(dòng)要首先啟動(dòng)服務(wù)再啟動(dòng)消費(fèi)者
-
項(xiàng)目啟動(dòng)成功訪問測(cè)試
image.png




