当前位置:首页 > 服务端 > SpringBoot1.x集成Dubbo及Mybatis详细介绍

SpringBoot1.x集成Dubbo及Mybatis详细介绍

2022年09月17日 17:17:07服务端4

前言:SpringBoot的前世今生:

SpringBoot由Pivotal小组开发和开源,Boot译为引导,SpringBoot的核心还是Spring,其意义是简化框架搭建(SpringBoot集成了大量开发库,例如spring-webmvc、jackson-json、validation-api和tomcat等),使码者废弃繁琐的模板化配置(比如:SSH和SSM架构候配置web.xml、加载spring和spring mvc、配置DataSource连接、配置spring事物,配置日志),更专注于业务和应用开发。

一: 项目结构

SpringBoot1.x集成Dubbo及Mybatis详细介绍 _ JavaClub全栈架构师技术笔记

模块 说明
sb-api entity、dto、vo、enum、constants存储层
sb-orm 数据模型映射持久化层-父级
sb-orm-test 数据模型映射持久化层-业务粒度
sb-service 微服务层-父级
sb-service-test 微服务层-业务粒度
sb-support 基础工具及组件层
sb-web web层

二: 搭建及重要文件说明

文件名 模块 说明
pom.xml sb-service-test 微服务提供者maven包依赖配置
TestServerApplication.java sb-service-test 微服务启动类
TestServiceImpl.java sb-service-test 微服务接口实现类及关键注解
application.properties sb-service-test 微服务核心文件,配置数据库+redis+线程池+MQ资源+指定日志文件及级别等等,可根据环境区分
pom.xm sb-web 服务消费者maven包依赖配置
StartWebApplication.java sb-web web服务启动类
TestController.java sb-web web服务及关键注解
application.yml sb-web web服务核心文件,配置系统+端口+服务注册地址,可根据环境区分,yml和properties文件SpringBoot都支持,只是yml是树形结构格式

<1>:微服务pom.xml文件(说明:已深度精简依赖)

<parent>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-parent</artifactId>
	<version>1.5.1.RELEASE</version>
</parent>

<dependency>
	<groupId>com.alibaba.spring.boot</groupId>
	<artifactId>dubbo-spring-boot-starter</artifactId>
	<version>${
     dubbo-spring-boot}</version>
	<exclusions>
		<exclusion>
			<groupId>org.springframework</groupId>
			<artifactId>spring</artifactId>
		</exclusion>
	</exclusions>
</dependency>
<dependency>
	<groupId>org.mybatis.spring.boot</groupId>
	<artifactId>mybatis-spring-boot-starter</artifactId>
	<version>${
     mybatis.spring.boot.starter.version}</version>
	<exclusions>
		<exclusion>
			<groupId>ch.qos.logback</groupId>
			<artifactId>logback-classic</artifactId>
		</exclusion>
	</exclusions>
</dependency>
<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>dubbo</artifactId>
	<version>2.5.3</version>
	<exclusions>
		<exclusion>
			<groupId>org.springframework</groupId>
			<artifactId>spring</artifactId>
		</exclusion>
	</exclusions>
</dependency>
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-log4j2</artifactId>
	<version>1.5.1.RELEASE</version>
</dependency>
<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<version>5.1.40</version>
</dependency>
<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>druid</artifactId>
	<version>1.0.9</version>
</dependency>
<dependency>
	<groupId>org.apache.zookeeper</groupId>
	<artifactId>zookeeper</artifactId>
	<version>3.4.6</version>
</dependency>
<dependency>
	<groupId>com.101tec</groupId>
	<artifactId>zkclient</artifactId>
	<version>0.10</version>
</dependency>

<2>:TestServerApplication.java文件
SpringBoot1.x集成Dubbo及Mybatis详细介绍 _ JavaClub全栈架构师技术笔记

@MapperScan("com.wangze.sb.orm.test") 指定要扫描的Mapper类的包的路径
@SpringBootApplication(scanBasePackages = {
     "com.wangze.sb.test"})类包扫描路径
它包含三个重要注解:@ComponentScan,@EnableAutoConfiguration,@SpringBootConfiguration
Spring框架有四大注解:@Service,@Repository,@Component,@Controller
@ComponentScan作用是自动扫描启动类的包下或者子包下被注解标识的类,识别并加入到IOC容器
@EnableAutoConfiguratio作用是替代Spring框架中的@Configuration注解
@EnableAutoConfiguration作用时候启动自动配置

<3>:TestServiceImpl.java文件

SpringBoot1.x集成Dubbo及Mybatis详细介绍 _ JavaClub全栈架构师技术笔记

注解名 作用解释
@org.springframework.stereotype.Service 属于Spring框架, 意指service层,用于标注业务层组件,还需结合xml配置dubbo:service interface等使用
@com.alibaba.dubbo.config.annotation.Service 属于dubbo, 用来声明provider的注解,即声明该类是服务的提供者
@Controller 属于Spring框架, 用于标注控制层组件(如struts中的action)
@Repository 属于Spring框架, 用于标注数据访问组件(即DAO组件),注意:如果系统配置自动扫描mapper接口,可省略
@Component 属于Spring框架, 泛指组件
@Resource 属于javaEE,非Spring框架,@Resource(“xxx”)定义bean名称,同时支持byType和byName两种方式进行装配依赖对象
@Autowired 属于Spring框架, @Autowired(“xxx”)定义bean名称,支持按照类型(byType)装配依赖对象,可结合@Qualifier(“xxx”) 支持按名称装备

<4>:application.properties文件

logging.config=classpath:log4j2-dev.xml
## Dubbo \u670D\u52A1\u63D0\u4F9B\u8005\u914D\u7F6E
spring.dubbo.application.id=sb.default
spring.dubbo.application.name=sb.default
spring.dubbo.registries.sb.address=127.0.0.1:2181
spring.dubbo.registries.sb.id=sb
spring.dubbo.registries.sb.group=sb
spring.dubbo.registries.sb.protocol=zookeeper
spring.dubbo.registries.sb.file=/sch.cache
spring.dubbo.consumer.check=false
spring.dubbo.protocol.name=dubbo
spring.dubbo.protocol.port=-1

## Datasource
spring.datasource.name=cons
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/pms?zeroDateTimeBehavior=convertToNull
spring.datasource.username=root
spring.datasource.password=789123Bb
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.filters=log4j2,wall
spring.datasource.maxActive=20
spring.datasource.initialSize=1
spring.datasource.maxWait=60000
spring.datasource.minIdle=1
spring.datasource.timeBetweenEvictionRunsMillis=60000
spring.datasource.minEvictableIdleTimeMillis=300000
spring.datasource.validationQuery=select 'x'
spring.datasource.testWhileIdle=true
spring.datasource.testOnBorrow=false
spring.datasource.testOnReturn=false
spring.datasource.poolPreparedStatements=true
spring.datasource.maxOpenPreparedStatements=20

#\u5F00\u542F\u9A7C\u5CF0\u8F6C\u6362
mybatis.configuration.mapUnderscoreToCamelCase=true
logging.level.com.wangze.orm=debug

<5>: web层pom.xml文件配置(说明:已深度精简依赖)

<parent>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-parent</artifactId>
	<version>1.5.1.RELEASE</version>
</parent>
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
	<exclusions>
		<exclusion>
			<groupId>ch.qos.logback</groupId>
			<artifactId>logback-classic</artifactId>
		</exclusion>
	</exclusions>
</dependency>
<dependency>
	<groupId>com.alibaba.spring.boot</groupId>
	<artifactId>dubbo-spring-boot-starter</artifactId>
	<version>2.0.0</version>
</dependency>
<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>dubbo</artifactId>
	<version>2.5.3</version>
	<exclusions>
		<exclusion>
			<artifactId>spring</artifactId>
			<groupId>org.springframework</groupId>
		</exclusion>
	</exclusions>
</dependency>
<dependency>
	<groupId>org.apache.zookeeper</groupId>
	<artifactId>zookeeper</artifactId>
	<version>3.4.6</version>
	<exclusions>
		<exclusion>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
		</exclusion>
	</exclusions>
</dependency>

<6>: StartWebApplication.java配置
SpringBoot1.x集成Dubbo及Mybatis详细介绍 _ JavaClub全栈架构师技术笔记

注解名 作用解释
@EnableDubboConfiguration 注意web层必须开启Dubbo龚配置

<7>: TestController.java配置
SpringBoot1.x集成Dubbo及Mybatis详细介绍 _ JavaClub全栈架构师技术笔记

注解名 作用解释
@RestController @RestController注解相当于@ResponseBody+@Controller合在一起的作用
@Reference 属于dubbo框架,标注消费者身份并开始 引用服务

<8>: application.yml配置

security:
  basic:
    enabled: false
  user:
    name: admin
    password: admin
    role: ADMIN
server:
  context-path: /sb-web
  port: 8888
spring:
  profiles:
    active:
    - dev
#        - test
#        - sit
#        - prod
logging:
  config: classpath:log4j2.xml

区分环境时可以指定注册中心zookeeper地址,例如 application-dev.yml

spring:
  dubbo:
    application:
      id: sb.default
      name: sb.default
    consumer:
      check: false
      timeout: 30000
    protocol:
      name: dubbo
      port: -1
    registries:
      sb:
        address: 127.0.0.1:2181
        group: sb
        id: sb
        protocol: zookeeper

3 服务启动及测试

<1>: 首先启动注册中心zookeeper服务。
SpringBoot1.x集成Dubbo及Mybatis详细介绍 _ JavaClub全栈架构师技术笔记<2>: 再启动微服务提供者TestServerApplication.java服务。
SpringBoot1.x集成Dubbo及Mybatis详细介绍 _ JavaClub全栈架构师技术笔记
<3>: 最后启动web消费者StartWebApplication.java服务。
SpringBoot1.x集成Dubbo及Mybatis详细介绍 _ JavaClub全栈架构师技术笔记
<4>: 访问系统
SpringBoot1.x集成Dubbo及Mybatis详细介绍 _ JavaClub全栈架构师技术笔记
<5>: 使用postman,jemter,idea restful,firefox HttpRequester等工具发送post请求看成果。SpringBoot1.x集成Dubbo及Mybatis详细介绍 _ JavaClub全栈架构师技术笔记

四:搭建过程踩过的坑

<1>: logback包冲突,原因是springboot自带的log4j与logback包冲突。

at org.springframework.boot.logging.logback.LogbackLoggingSystem.loadConfiguration(LogbackLoggingSystem.java:161)

解决办法:

[1]微服务层:
<dependency>
	<groupId>org.mybatis.spring.boot</groupId>
	<artifactId>mybatis-spring-boot-starter</artifactId>
	<version>${
     mybatis.spring.boot.starter.version}</version>
	<exclusions>
		<exclusion>
			<groupId>ch.qos.logback</groupId>
			<artifactId>logback-classic</artifactId>
		</exclusion>
	</exclusions>
</dependency>
[2]web层:
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
	<exclusions>
		<exclusion>
			<artifactId>logback-classic</artifactId>
			<groupId>ch.qos.logback</groupId>
		</exclusion>
	</exclusions>
</dependency>

<2>: slf4j-log4j12包冲突,原因是springboot自带的log4j与slf4j-log4j12包冲突。

java.lang.IllegalStateException: Detected both log4j-over-slf4j.jar AND bound slf4j-log4j12.jar on the class path, preempting StackOverflowError

解决办法:

[1]web层:
<dependency>
	<groupId>org.apache.zookeeper</groupId>
	<artifactId>zookeeper</artifactId>
	<version>3.4.6</version>
	<exclusions>
		<exclusion>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
		</exclusion>
	</exclusions>
</dependency>

<3>: spring包冲突,原因是springboot及duboo中自带的spring包与apache spring包冲突

java.lang.IllegalStateException: No persistence exception translators found in bean factory. Cannot perform exception translation.

解决办法:

[1]微服务层:
<dependency>
	<groupId>com.alibaba.spring.boot</groupId>
	<artifactId>dubbo-spring-boot-starter</artifactId>
	<version>${
     dubbo-spring-boot}</version>
	<exclusions>
		<exclusion>
			<groupId>org.springframework</groupId>
			<artifactId>spring</artifactId>
		</exclusion>
	</exclusions>
</dependency>
<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>dubbo</artifactId>
	<version>2.5.3</version>
	<exclusions>
		<exclusion>
			<groupId>org.springframework</groupId>
			<artifactId>spring</artifactId>
		</exclusion>
	</exclusions>
</dependency>
[2]web层:
<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>dubbo</artifactId>
	<version>2.5.3</version>
	<exclusions>
		<exclusion>
			<groupId>org.springframework</groupId>
			<artifactId>spring</artifactId>
		</exclusion>
	</exclusions>
</dependency>
[2]web层:
<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>dubbo</artifactId>
	<version>2.5.3</version>
	<exclusions>
		<exclusion>
			<groupId>org.springframework</groupId>
			<artifactId>spring</artifactId>
		</exclusion>
	</exclusions>
</dependency>

<4>: lease check registry access list (whitelist/blacklist)

Forbid consumer 10.26.190.89 access service com.wangze.sb.test.dubbo.TestService from registry 127.0.0.1:2181 use dubbo version 2.5.3, Please check registry access list (whitelist/blacklist)

解决办法:服务不可用,这种错误比较常见,微服务添加@Component注解
SpringBoot1.x集成Dubbo及Mybatis详细介绍 _ JavaClub全栈架构师技术笔记

作者:王泽LoveTina
来源链接:https://blog.csdn.net/For_niu/article/details/87875470

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/server/42548.html

标签: Dubbo
分享给朋友:

“SpringBoot1.x集成Dubbo及Mybatis详细介绍” 的相关文章

dubbo+spring_maven 遇到的问题 Error creating bean with name '***': Instantiation of bean failed;

Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'cpUserAgent': Instantia...

dubbo监控报错Error creating bean with name 'uriBrokerService'

dubbo监控报错Error creating bean with name 'uriBrokerService'

在jdk1.8下面会出现此错误   解决方法: 1、更换服务器jdk版本。(会影响其他项目环境) 2、修改dubbo-admin tomcat默认jdk版本。 3、修改dubbo-admin项目依赖(dependency)从新打包。 进入h...

Java高级面试必问—Dubbo面试题汇总

1、默认使用的是什么通信框架,还有别的选择吗?2、服务调用是阻塞的吗?3、一般使用什么注册中心?还有别的选择吗?4、默认使用什么序列化框架,你知道的还有哪些?5、服务提供者能实现失效踢出是什么原理?6、服务上线怎么不影响旧版本?7、如何解决服务调用链过长的问题?8、说说核心的配置...

Spring Boot Dubbo applications.properties 配置清单

Spring Boot Dubbo applications.properties 配置清单

摘要: 原创出处 www.bysocket.com 「泥瓦匠BYSocket 」欢迎转载,保留摘要,谢谢! 『 与其纠结,不如行动学习。Innovate ,And out execute ! 』 本文提纲 一、前言 二、applications.properti...

Dubbo面试题及答案(2022最新版)

Dubbo面试题及答案,每道都是认真筛选出的高频面试题,助力大家能找到满意的工作! 下载链接:全部面试题及答案PDF 1、Dubbo是什么? Dubbo是阿里巴巴开源的基于 Java 的高性能 RPC 分布式服务框架,现已成为 Apac...

Springboot整合dubbo(一):搭建一个springboot + dubbo的微服务

Springboot整合dubbo(一):搭建一个springboot + dubbo的微服务

现在越来越多的公司开发项目中使用了springboot作为搭建服务的框架,因为springboot集成了一套完整项目所需要的基本的开发工具的jar包,无需再像之前开发一个spring项目中需要引入各种配置,只需要引入简单的几个配置就能达到项目的启动,大大减少了开发周期,使开发越来...

史上最全 40 道 Dubbo 面试题及答案,看完碾压面试官!

史上最全 40 道 Dubbo 面试题及答案,看完碾压面试官!

想往高处走,怎么能不懂 Dubbo? Dubbo是国内最出名的分布式服务框架,也是 Java 程序员必备的必会的框架之一。Dubbo 更是中高级面试过程中经常会问的技术,无论你是否用过,你都必须熟悉。 下面我为大家准备了一些 Dubbo 常见的的面...

搭建SpringBoot+dubbo+zookeeper+maven框架(一)

搭建SpringBoot+dubbo+zookeeper+maven框架(一)

这几天项目还没来,所以就自己试着参考网上的一些资料,搭建了一个SpringBoot+dubbo+zookeeper+maven框架,网上参考的很多资料照着他们一步一步搭建,最后很多都运行不通,很是郁闷,最后自己在总结了他们之后自己搭建了一个,项目的源码我会附在文章的最后,并且后期还会继...

70道Dubbo面试题及答案(最新整理)

70道Dubbo面试题及答案(最新整理)

Dubbo面试题及答案【最新版】Dubbo面试题大全(2021版),发现网上很多Dubbo面试题及答案整理都没有答案,所以花了很长时间搜集,本套Dubbo面试题大全 如果不背 Dubbo面试题的答案,肯定面试会挂! 这套Dubbo面试题大全,希望对大家有帮助哈...

SpringCloud采用Dubbo远程调用(SpringCloud Alibaba)

SpringCloud采用Dubbo远程调用(SpringCloud Alibaba)

系统架构:      这里只演示以下组件,其他组件的使用和SpringCloud一样     application-1 :应用1,模拟应用,提供http接口服务。     service-1 :微服务1,模拟微服务,提供dubbo接口服务。     se...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。