当前位置: 代码迷 >> 综合 >> dubbo + druid + springboot
  详细解决方案

dubbo + druid + springboot

热度:21   发布时间:2023-12-04 23:36:36.0

1、新建一个springboot项目

pom.xml

<?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.test</groupId><artifactId>dubbotest</artifactId><version>1.0-SNAPSHOT</version><packaging>pom</packaging><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.5.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent></project>

2、新建一个model的maven子工程(结构如下,实体类为mybatis代码生成工具生成),完成后install

2、新建一个mapper的maven子工程(需依赖model和mybatis jar),install

pom.xml

<?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"><parent><artifactId>dubbotest</artifactId><groupId>com.test</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>mapper</artifactId><dependencies><dependency><groupId>com.test</groupId><artifactId>model</artifactId><version>1.0-SNAPSHOT</version></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.0.1</version></dependency></dependencies></project>

3、新建一个api的maven子工程(依赖model),install

UserService

package com.test.service;import com.test.entity.User;import java.util.List;public interface UserService {List<User> findAll();
}

pom.xml

<?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"><parent><artifactId>dubbotest</artifactId><groupId>com.test</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>api</artifactId><dependencies><dependency><groupId>com.test</groupId><artifactId>model</artifactId><version>1.0-SNAPSHOT</version></dependency></dependencies></project>

4、新建一个springboot子项目(依赖dubbo,druid,mapper,api)

pom.xml

<?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><parent><artifactId>dubbotest</artifactId><groupId>com.test</groupId><version>1.0-SNAPSHOT</version></parent><artifactId>service</artifactId><name>service</name><dependencies><dependency><groupId>com.test</groupId><artifactId>mapper</artifactId><version>1.0-SNAPSHOT</version></dependency><dependency><groupId>com.test</groupId><artifactId>api</artifactId><version>1.0-SNAPSHOT</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></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-starter-logging</artifactId></dependency><dependency><groupId>io.dubbo.springboot</groupId><artifactId>spring-boot-starter-dubbo</artifactId><version>1.0.0</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.1.16</version></dependency><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

UserServiceImpl.java(注意@Service注解是使用alibaba的)

package com.test.service.impl;import com.alibaba.dubbo.config.annotation.Service;
import com.test.entity.User;
import com.test.mapper.UserMapper;
import com.test.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;import java.util.List;@Service
public class UserServiceImpl implements UserService {@Autowiredprivate UserMapper userMapper;@Overridepublic List<User> findAll() {return userMapper.selectByExample(null);}
}

UserMapper.xml(代码自动生成工具生成)

application.properties(配置druid,mybatis,dubbo)

server.port=8081
##########################  mysql 数据源  ##########################
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/bank?characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
# 告诉系统使用的数据源的类型
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
# 初始化大小,最小,最大
spring.datasource.initialSize=5
spring.datasource.minIdle=5
spring.datasource.maxActive=20
# 配置获取连接等待超时的时间
spring.datasource.maxWait=60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
spring.datasource.timeBetweenEvictionRunsMillis=60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
spring.datasource.minEvictableIdleTimeMillis=300000
# 校验SQL,Oracle配置 spring.datasource.validationQuery=SELECT 1 FROM DUAL,如果不配validationQuery项,则下面三项配置无用
spring.datasource.validationQuery=SELECT '1'
spring.datasource.testWhileIdle=true
spring.datasource.testOnBorrow=false
spring.datasource.testOnReturn=false
# 打开PSCache,并且指定每个连接上PSCache的大小
spring.datasource.poolPreparedStatements=true
spring.datasource.maxPoolPreparedStatementPerConnectionSize=20
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
spring.datasource.filters=stat,wall,log4j
# 通过connectProperties属性来打开mergeSql功能;慢SQL记录
spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=1
# 合并多个DruidDataSource的监控数据
spring.datasource.useGlobalDataSourceStat=true##########################  mybatis   ##########################
mybatis.mapper-locations=classpath:mapping/*.xml
pagehelper.helperDialect=mysql
pagehelper.reasonable=true
pagehelper.supportMethodsArguments=true
pagehelper.params=count=countSql
##########################log#################################
logging.level.com.test.mapper=debug
logging.level.root=info
##########################dubbo################################
# 配置dubbo
# 这个注册到注册中心的名字
spring.dubbo.application.name=user_provider
# 注册中心的地址  2181 是zookeeper的默认端口
spring.dubbo.registry.address=zookeeper://192.168.25.128:2181
# 协议是dubbo
spring.dubbo.protocol.name=dubbo
# 提供服务真实的端口 服务在哪里运行 就是ip地址
spring.dubbo.protocol.port=20881
# 去哪里扫面 阿里巴巴@Service 注解 扫到一个这个的注解 意味这个service 要要注册的
spring.dubbo.scan=com.test.service.impl

项目的入口类加上如下注解

install

5、发布服务(可以在看到已经成功在注册中心发布了提供者)

6、添加消费者(创建一个springboot的项目,依赖api,dubbo)

pom.xml

<?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><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.6.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.test</groupId><artifactId>dubbotest_customer</artifactId><version>0.0.1-SNAPSHOT</version><name>dubbotest_customer</name><description>Demo project for Spring Boot</description><dependencies><dependency><groupId>com.test</groupId><artifactId>api</artifactId><version>1.0-SNAPSHOT</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-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></dependency><dependency><groupId>io.dubbo.springboot</groupId><artifactId>spring-boot-starter-dubbo</artifactId><version>1.0.0</version></dependency><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

UserController.java

package com.test.dubbotest_customer.controller;import com.alibaba.dubbo.config.annotation.Reference;
import com.test.entity.User;
import com.test.service.UserService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.List;@RestController
public class UserController {@Referenceprivate UserService userService;@GetMapping("/findall")public List<User> findAll(){return userService.findAll();}
}

application.properties

#dubbo
spring.dubbo.application.name=user_customer
spring.dubbo.registry.address=zookeeper://192.168.25.128:2181
spring.dubbo.scan=com.test.dubbotest_customer.controller#port
server.port=8082

7、发布消费者

8、测试(访问localhost:8082/findall),报错

为提供者的实体类实现序列化接口,再次测试

  相关解决方案