完整Dubbo案例演示
1.原型
1.1部门显示
显示全部部门信息
1.2员工新增
1.3查看部门员工
2.按照分布式架构进行设计项目
设定员工管理和部门管理不在同一个模块中,需要有一个员工管理项目和一个部门管理项目。
为了方便,不去每个项目使用一个窗口,而是使用聚合项目。
3.创建数据库表
create table dept(
id int(11) primary key auto_increment,
name varchar(20)
);insert into dept values(default,'开发部');
insert into dept values(default,'产品部');create table emp(
id int(11) primary key auto_increment,
name varchar(20),
photo varchar(200),
did int(11),
CONSTRAINT fk_emp_dept FOREIGN key (did) REFERENCES dept(id)
);
4.创建父项目
创建项目parent。
编写pom.xml
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.4</version>
</parent>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>2.5.4</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.5.4</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
<version>2.5.4</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.3</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>4.2.0</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>4.2.0</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
</dependencies>
</dependencyManagement>
5.创建pojo项目
Dept实体类
public class Dept implements Serializable{
private Integer id;
private String name ;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Dept{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
emp实体类
public class Emp implements Serializable{
private Integer id ;
private String name ;
private String photo ;
private Integer did ;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getDid() {
return did;
}
public void setDid(Integer did) {
this.did = did;
}
public String getPhoto() {
return photo;
}
public void setPhoto(String photo) {
this.photo = photo;
}
@Override
public String toString() {
return "Emp{" +
"id=" + id +
", name='" + name + '\'' +
", photo='" + photo + '\'' +
", did=" + did +
'}';
}
6.创建mapper项目
6.1编写pom.xml
<dependencies>
<dependency>
<artifactId>pojo</artifactId>
<groupId>com.msb</groupId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
</dependencies>
6.2新建配置文件
新建application-mybatis.yml
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/maven
username: root
password: rootmybatis:
mapper-locations: classpath:mybatis/*.xml
type-aliases-package: com.msb.pojo
7.新建api项目
7.1编写pom.xml
<dependencies> <dependency> <artifactId>pojo</artifactId> <groupId>com.msb</groupId> <version>1.0.0</version> </dependency> </dependencies>
7.2 目录
7.3DeptDubboService
public interface DeptDubboService { public List<Dept> findAllDept(); }
7..4 EmpDubboService
public interface EmpDubboService { public int insertEmp(Emp emp); public List<Emp> findEmpByDeptId(Integer did); }
8.新建provider
8.1编写pom.xml
<dependencies>
<dependency>
<artifactId>mapper</artifactId>
<groupId>com.msb</groupId>
<version>1.0.0</version>
</dependency>
<dependency>
<artifactId>api</artifactId>
<groupId>com.msb</groupId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
</dependency>
</dependencies>
8.2新建配置文件
新建application.yml
dubbo:
application:
name: dubbo-provider
registry:
address: zookeeper://192.168.52.128:2181# 加载其他配置文件,加载其他application-*.yml文件,多个名称之间使用逗号分隔
spring:
profiles:
active: mybatis
8.3新建启动类
新建com.msb.ProviderApplication
@SpringBootApplication
@EnableDubbo
@MapperScan("com.msb.mapper")
public class ProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ProviderApplication.class,args);
}
}
9.完成Dept查询功能
9.1在api中新建接口
com.msb.dubbo.service.DeptDubboService
public interface DeptDubboService {
List<Dept> selectAll();
}
9.2在provider中新建实现类
com.msb.dubbo.service.impl.DeptDubboServiceImpl
<br class="Apple-interchange-newline"><div></div>
@Servicepublic class DeptDubboServiceImpl implements DeptDubboService {@Autowiredprivate DeptMapper deptMapper;@Overridepublic List<Dept> selectAll() {return deptMapper.selectByExample(null);}}
9.3新建项目dept
9.3.1添加依赖
<dependencies>
<dependency>
<artifactId>api</artifactId>
<groupId>com.msb</groupId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
</dependency>
</dependencies>
9.3.2编写配置文件
新建application.yml
dubbo:
application:
name: dubbo-dept-consumer
registry:
address: zookeeper://192.168.52.128:2181
9.3.4新建接口及实现类
接口:com.msb.service.DeptService
实现类:com.msb.service.impl.DeptServiceImpl
public interface DeptService {
List<Dept> showAll();
}
@Service
public class DeptServiceImpl implements DeptService {
@Reference
private DeptDubboService deptDubboService;
@Override
public List<Dept> showAll() {
return deptDubboService.selectAll();
}
}
9.3.5新建控制器
com.msb.controller.DeptController
@Controller
public class DeptController {@Autowired
private DeptService deptService;@GetMapping("/dept")
public String shwoDept(Model model){
model.addAttribute("list",deptService.showAll());
return "dept";
}
}
9.3.6 新建页面
在resources /templates新建dept.html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<table border="1" width="500">
<tr>
<th>编号</th>
<th>部门名称</th>
<th>查看</th>
</tr>
<tr th:each="dept : ${list}">
<td th:text="${dept.id}"></td>
<td th:text="${dept.name}"></td>
<td> <a th:href="@{/showEmp(did=${dept.id})}">查看</a> </td>
</tr>
</table>
</body>
</html>