突破CRUD | 万能树Java工具类封装(源码)
一.项目结构
|-- spring-boot-dubbo-demo (父级工程)
|--spring-boot-dubbo-base(基础工程)
|--spring-boot-dubbo-consumer(消费者)
|--spring-boot-dubbo-provider(生产者)
SpringBoot版本:2.2.0
Dubbo版本:2.7.0
Nacos版本:1.1.4
二.启动Nacos注册中心
Nacos官方文档:
https://nacos.io/zh-cn/docs/quick-start.html
默认账号密码是nacos
三.搭建项目
Consumer和Provider的Maven依赖如下:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--Base依赖-->
<dependency>
<groupId>com.sans</groupId>
<artifactId>spring-boot-dubbo-base</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<!--Dubbo依赖-->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.0</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>2.7.0</version>
</dependency>
<!--Nacos依赖-->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-registry-nacos</artifactId>
<version>2.7.1</version>
</dependency>
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>
Consumer配置如下:
#配置端口
server:
port:8862
dubbo:
#配置服务信息
application:
name:dubbo-consumer
#禁用QOS同一台机器可能会有端口冲突现象
qos-enable:false
qos-accept-foreign-ip:false
#配置注册中心
registry:
address:nacos://127.0.0.1:8848
#设置超时时间
consumer:
timeout:4000
spring:
main:
#解决Bean重复定义问题
allow-bean-definition-overriding:true
Provider配置如下:
#配置端口
server:
port:8861
dubbo:
#配置服务信息
application:
name:dubbo-provider
#禁用QOS同一台机器可能会有端口冲突现象
qos-enable:false
qos-accept-foreign-ip:false
#配置注册中心
registry:
address:nacos://127.0.0.1:8848
#设置协议-协议由提供方指定消费方被动接受
protocol:
name:dubbo
port:20880
spring:
main:
#解决Bean重复定义问题
allow-bean-definition-overriding:true
四.Base工程编写
编写DTO
/**
*RPC接口DTO
*注意这里要实现序列化接口
*@AuthorSans
*@CreateTime2019/11/623:04
*/
@Data
publicclassProviderTestDTOimplementsSerializable{
//ID
privateintid;
//名字
privateStringname;
//序号
privateIntegernumber;
}
编写Serivce
/**
*RPC接口
*@AuthorSans
*@CreateTime2019/11/623:03
*/
publicinterfaceIProviderService{
List<ProviderTestDTO>queryList();
}
编写返回结果类
/**
*返回结果类
*这里采用构建者模式构建
*优点:1.私有化构造器访问范围小 2.参数可灵活设置便于管理
*@AuthorSans
*@CreateTime2019/11/718:59
*/
@Getter
publicclassResultVO<T>implementsSerializable{
/**
*返回码
*/
privateintcode;
/**
*返回信息
*/
privateStringmessage;
/**
*返回数据
*/
privateTdata;
/**私有化构造器**/
privateResultVO(){}
privateResultVO(ResultVO<T>resultVO){
this.code=resultVO.code;
this.message=resultVO.message;
this.data=resultVO.data;
}
/**
*Build
*/
publicstaticclassBuilder<T>{
privateResultVO<T>resultVO;
publicBuilder(){
resultVO=newResultVO<>();
}
publicBuildercode(intcode){
resultVO.code=code;
returnthis;
}
publicBuildermessage(Stringmessage){
resultVO.message=message;
returnthis;
}
publicBuilderdata(Tdata){
resultVO.data=data;
returnthis;
}
publicResultVO<T>build(){
returnnewResultVO<>(resultVO);
}
}
}
五.Provider工程编写
在启动类上面不要忘记加上@EnableDubbo注解
@EnableDubbo//开启Dubbo的注解支持
@SpringBootApplication
publicclassProviderApplication{
publicstaticvoidmain(Stringargs){
SpringApplication.run(ProviderApplication.class,args);
}
}
实现IProviderService接口,注意这里的Serivce引用的是dubbo的包
/**
*生产者Dubbo接口实现
*@AuthorSans
*@CreateTime2019/11/623:01
*/
@Service
publicclassProviderServiceImplimplementsIProviderService{
@Override
publicList<ProviderTestDTO>queryList(){
//初始化数据
ProviderTestDTOtestDTO1=newProviderTestDTO();
testDTO1.setId(1);
testDTO1.setName(\"学生\");
testDTO1.setNumber(100);
ProviderTestDTOtestDTO2=newProviderTestDTO();
testDTO2.setId(2);
testDTO2.setName(\"教师\");
testDTO2.setNumber(101);
//组装数据
List<ProviderTestDTO>list=newArrayList<>();
list.add(testDTO1);
list.add(testDTO2);
returnlist;
}
}
六.Consumer工程编写
和Provider工程的启动类一样,加上@EnableDubbo注解
@EnableDubbo//开启dubbo的注解支持
@SpringBootApplication
publicclassConsumerApplication{
publicstaticvoidmain(Stringargs){
SpringApplication.run(ConsumerApplication.class,args);
}
}
编写测试接口
/**
*消费测试接口
*@AuthorSans
*@CreateTime2019/11/623:09
*/
@RestController
@RequestMapping(\"/consumer\")
publicclassConsumerController{
//Dubbo远程调用注解
@Reference
privateIProviderServiceproviderService;
@RequestMapping(value=\"/list\",method=RequestMethod.GET)
publicResultVOgetList(){
//远程调用
List<ProviderTestDTO>providerTestDTOList=providerService.queryList();
returnnewResultVO.Builder<>().code(200).message(\"success\").data(providerTestDTOList).build();
}
}
七.测试
启动Provider工程和Consumer工程,这个时候Nacos会有对应的服务
使用Postman访问Consumer测试接口
八.项目源码
码云:
https://gitee.com/liselotte/spring-boot-dubbo-demo
GitHub:
https://github.com/xuyulong2017/my-java-demo