10. Spring Boot 整合Dubbo
10.1 步骤总结
(1) 服务提供者工程
- 添加各种依赖
- 在启动类上添加
@EnableDubboConfiguration 注解
,开启 Dubbo 自动配置 - 修改配置文件
- 在启动类上添加
@EnableTransactionManagement 注解
,开启 Dubbo 自定义的事务管理器
一定要加这个注解,dubbo的事务管理器是自己实现的,如果不开启事务管理器,相当于这个dubbo应用没有完全启动 - 在 Service 实现类上添加
阿里的@Service 注解
,及@Component 注解
(2) 服务消费者工程
- 添加各种依赖
- 在启动类上添加
@EnableDubboConfiguration 注解
,开启 Dubbo 自动配置 - 修改配置文件
- 在处理器的 Service 成员变量上添加
@Reference 注解
,删除@Autowired 注解
10.2 定义 commons 工程 11-dubboCommons
(1) 创建工程
这里就创建一个普通的 Maven 的 Java 工程,并命名为 11-dubboCommons。
(2) 定义 pom 文件
<groupId>com.abc</groupId>
<artifactId>11-dubboCommons</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.2</version>
<scope>provided</scope>
</dependency>
</dependencies>
(3) 定义实体类
(4) 定义业务接口
(5) 将工程安装到本地库
运行 Maven 的 install 命令,将工程安装到本地版本库,以备其它工程使用。
10.3 定义提供者 11-provider-springboot
(1) 创建工程
复制工程应用篇(四) 里Redis的工程,并重命名为 11-provider-springboot。
(2) 定义 pom 文件
A、添加 dubbo 与 spring boot 整合依赖
B、 添加 zkClient 依赖
C、 其它依赖
- dubboCommons 依赖
- spring boot 与 redis 整合依赖
- mybatis 与 spring boot 整合依赖
- 数据源 Druid 依赖
- mysql 驱动依赖
- slf4j-log4j12 依赖
- spring-boot-starter-web 依赖
D、pom 文件
<groupId>com.abc</groupId>
<artifactId>11-provider-springboot</artifactId>
<version>0.0.1-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.5.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!--dubbo 与 spring boot 整合依赖-->
<dependency>
<groupId>com.alibaba.spring.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>
<!-- zk 客户端依赖:zkclient -->
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.10</version>
</dependency>
<dependency>
<groupId>com.abc</groupId>
<artifactId>11-dubboCommons</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!--Spring Boot 与 Redis 整合依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!--mybatis 与 Spring Boot 整合依赖-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<!--数据源 Druid 依赖-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
<!--MySQL 驱动依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.25</version>
<scope>test</scope>
</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>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
<resources>
<!--注册 dao 包下 mybatis 映射文件为资源目录-->
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</build>
(3) 定义 Service 实现类
把@Service注解换成阿里的@Service注解:
(4) 定义 Dao 接口
(5) 定义映射文件
<mapper namespace="com.abc.dao.EmployeeDao">
<insert id="insertEmployee">
insert into employee(name, age) values(#{name}, #{age})
</insert>
<select id="selectEmployeeCount" resultType="int">
select count(id) from employee
</select>
<select id="selectEmployeeById" resultType="Employee">
select id, name, age from employee where id=#{xxx}
</select>
</mapper>
(6) 修改启动类
在启动类上必须要添加@EnableDubboConfiguration 注解,开启 Dubbo 的自动配置功能。
(7) 修改主配置文件
server:
port: 8888
mybatis:
# 注册 mybatis 中实体类的别名
type-aliases-package: com.abc.bean
# 注册映射文件
mapper-locations: classpath:com/abc/dao/*.xml
spring:
# 注册数据源
datasource:
# 指定数据源类型为 Druid
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql:///test?useUnicode=true&characterEncoding=utf8
username: root
password: 111
# 连接 Redis 服务器
redis:
host: redis5OS
port: 6379
password: 111
# 连接 Redis 高可有集群
# redis:
# sentinel:
# master: mymaster
# nodes:
# - sentinelOS1:26379
# - sentinelOS2:26379
# - sentinelOS3:26379
# 配置缓存
cache:
type: redis # 指定缓存类型
cache-names: realTimeCache # 指定缓存区域名称
# 功能等价于 spring-dubbo 配置文件中的<dubbo:application/>
# 该名称是由服务治理平台使用
application:
name: 11-provider-springboot
# 指定 zk 注册中心
dubbo:
registry: zookeeper://zkOS:2181
# zk 集群作注册中心
# registry: zookeeper://zkOS1:2181?backup=zkOS2:2181,zkOS3:2181
10.4 定义消费者 11-consumer-springboot
(1) 创建工程
创建一个 Spring Boot 工程,并重命名为 11-consumer-springboot。
(2) 定义 pom 文件
- dubbo 与 spring boot 整合依赖
- zkClient 依赖
- dubboCommons 依赖
- JSP 引擎 jasper 依赖
- slf4j-log4j12 依赖
- spring-boot-starter-web 依赖
<groupId>com.abc</groupId>
<artifactId>11-consumer-springboot</artifactId>
<version>0.0.1-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.5.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!--dubbo 与 spring boot 整合依赖-->
<dependency>
<groupId>com.alibaba.spring.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>
<!-- zk 客户端依赖:zkclient -->
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.10</version>
</dependency>
<dependency>
<groupId>com.abc</groupId>
<artifactId>11-dubboCommons</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!--Tomcat 内置 JSP 引擎 jasper-->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.25</version>
<scope>test</scope>
</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>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
<resources>
<!--注册 webapp 目录为资源目录-->
<resource>
<directory>src/main/webapp</directory>
<targetPath>META-INF/resources</targetPath>
<includes>
<include>**/*.*</include>
</includes>
</resource>
</resources>
</build>
(3) 修改主配置文件
spring:
# 功能等价于 spring-dubbo 配置文件中的<dubbo:application/>
application:
name: 11-consumer-springboot
# 指定 zk 注册中心
dubbo:
registry: zookeeper://zkOS:2181
# zk 集群作注册中心
# registry: zookeeper://zkOS1:2181?backup=zkOS2:2181,zkOS3:2181
(4) 创建 index.jsp 页面
在 src/main/webapp 目录下定义 index.jsp 文件。
(5) 定义处理器
(6) 定义 welcome.jsp 页面
在 src/main/webapp 目录下定义 welcome.jsp 文件。
(7) 修改入口类