赣州新闻网

首页 / 科技

突破CRUD | 万能树Java工具类封装(源码)

2020-01-10 · 赣州新闻网 · 科技

一.项目结构

|-- 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

Springboot+Dubbo+Nacos 注解方式实现微服务调用

Springboot+Dubbo+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会有对应的服务

Springboot+Dubbo+Nacos 注解方式实现微服务调用

使用Postman访问Consumer测试接口

Springboot+Dubbo+Nacos 注解方式实现微服务调用

八.项目源码

码云:

https://gitee.com/liselotte/spring-boot-dubbo-demo

GitHub:

https://github.com/xuyulong2017/my-java-demo

测试项目赣州中心接口设置信息消费工程