SpringBoot(四):与dobbo的整合(注解形式与xml形式)
来源:互联网 发布:淘宝图片推荐几款相机 编辑:程序博客网 时间:2024/06/06 05:16
平时项目一直用的ssm+dubbo,现在公司打算采用springboot+dubbo整合,所以就去研究了下。
这里写出两种形式的整合,凭兴趣爱好选择。
一.初始化mysql表:
- DROP TABLE `user` IF EXISTS
- CREATE TABLE `user` (
- `id` varchar(32) NOT NULL,
- `name` varchar(255) DEFAULT NULL,
- `age` int(11) DEFAULT NULL,
- PRIMARY KEY (`id`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
二、构建项目
为了测试方便起见,这里使用JPA+H2数据库
项目结构
1、user-api
如果使用JPA,实体上加注解,需要引入
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency>实体类
@Entity@Table(name = "t_user")public class User implements Serializable{private static final long serialVersionUID = -1369148652554782331L;@Id @GeneratedValueprivate Integer id;private String name;private Integer age;get/set省略。。。service类略...
2、user-service(基于注解的实现)
需要添加的依赖
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><!-- h2数据库 --><dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>com.example</groupId><artifactId>user-api</artifactId><version>0.0.1-SNAPSHOT</version></dependency><!-- Spring Boot Dubbo 依赖 --><dependency><groupId>io.dubbo.springboot</groupId><artifactId>spring-boot-starter-dubbo</artifactId><version>1.0.0</version></dependency></dependencies>配置文件application.properties
spring.jpa.hibernate.ddl-auto=createspring.jpa.hibernate.show-sql: truespring.h2.console.enabled: true server.port=8081# Dubbo 生产者spring.dubbo.application.name=provider# 注册中心spring.dubbo.registry.address=zookeeper://localhost:2181# 协议spring.dubbo.protocol.name=dubbo# 端口spring.dubbo.protocol.port=20880# 扫描包spring.dubbo.scan=com.example.demo
userDao
/** * userDao * @author majie */@Repositorypublic interface UserDao extends JpaRepository<User, String> {}userServiceImpl
import java.util.List;import org.springframework.beans.factory.annotation.Autowired;import com.example.demo.dao.UserDao;import com.example.demo.entity.User;import com.example.demo.service.UserService;import com.alibaba.dubbo.config.annotation.Service;//这里引入的不是spring的service包/** * service实现类 * 约定生产者在实现类上提供dubbo服务 * * @author majie */@Service(version="1.0.0")public class UserServiceImpl implements UserService {@Autowiredprivate UserDao dao; //其他方法省略version表示版本号
其他配置,基本和xml中配置一样,只不过这里是写入类里面了
启动类
package com.example.demo;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class Provider { public static void main(String[] args) throws InterruptedException { SpringApplication.run(Provider.class, args); }}使用注解的启动类不需要改变
user-service(基于xml实现)
修改dubbo依赖为(现在dubbo更新到了2.5.4还没去试过)
<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.apache.zookeeper</groupId><artifactId>zookeeper</artifactId><version>3.4.6</version><scope>compile</scope></dependency><dependency><groupId>com.101tec</groupId><artifactId>zkclient</artifactId><version>0.4</version></dependency>
spring-dubbo.xml
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"><!-- 提供方应用信息,用于计算依赖关系 --><dubbo:application name="dubbo-provider" /><!-- 使用zookeeper注册中心暴露服务地址 --><dubbo:registry protocol="zookeeper" address="localhost:2181" /><!-- 用dubbo协议在20880端口暴露服务 --><dubbo:protocol name="dubbo" port="20880" /><!-- 声明需要暴露的服务接口 --><dubbo:service interface="com.example.demo.service.UserService" ref="userService" /></beans>
启动类
import java.util.concurrent.CountDownLatch;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.boot.builder.SpringApplicationBuilder;import org.springframework.context.ApplicationContext;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.ImportResource;@SpringBootApplication@ImportResource({"classpath:spring-dubbo.xml"}) //引入配置文件public class Provider { private static final Logger logger = LoggerFactory.getLogger(Provider.class); @Bean public CountDownLatch closeLatch() { return new CountDownLatch(1); } public static void main(String[] args) throws InterruptedException { ApplicationContext ctx = new SpringApplicationBuilder().sources(Provider.class).web(false).run(args); logger.info("项目启动!"); CountDownLatch closeLatch = ctx.getBean(CountDownLatch.class); closeLatch.await(); }}
@Service的注解要改成spring的注解
3、web消费者(基于注解)
添加依赖
<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>com.example</groupId><artifactId>user-api</artifactId><version>0.0.1-SNAPSHOT</version><!-- 排除这个jar 不引入数据库 --><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></exclusion></exclusions></dependency><!-- Spring Boot Dubbo 依赖 --><dependency><groupId>io.dubbo.springboot</groupId><artifactId>spring-boot-starter-dubbo</artifactId><version>1.0.0</version></dependency>因为引入了user-pai,所以会引入jpa的jar,springboot是会根据依赖自动去扫描,看是有该配置,如果没有就会报错,
这里为了不在web中引入数据库,需要排除该jar.再或者你在配置文件配置和service一样的
配置文件
server.port=8080## Dubbo 服务消费者配置spring.dubbo.application.name=consumerspring.dubbo.registry.address=zookeeper://localhost:2181spring.dubbo.scan=com.example.demo
@RestControllerpublic class UserController {@Reference(version="1.0.0")private UserService userService;@GetMapping("/get")public List<User> getUser() {return userService.getList();}这里需要使用@Reference注解,而不是使用@Autowired或者@Resource,当然后面对应的信息也需要和生产者类似
启动入口和servic一样。
web消费者(基于xml)
依赖修改和service一样
配置文件:spring-duubo.xml
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"><!-- 提供方应用信息,用于计算依赖关系 --><dubbo:application name="dubbo-consumer" /><!-- 使用zookeeper注册中心暴露服务地址 --><dubbo:registry protocol="zookeeper" address="localhost:2181" /><!-- 声明需要暴露的服务接口 --><dubbo:reference id="userService" interface="com.example.demo.service.UserService" /></beans>
Controller层和正常的springmvc一样写法
注入用@Autowired或者@Resource
启动类一样,引入文件就好。
测试
启动zk以后,因为我们没有设置check=false,所以这里先启动生产者,然后在启动消费者进行测试
最后关于热部署的问题。
springboot整合dubbo的时候,如果引入
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId></dependency>会报错。可能是jar包冲突引起的,弄了半天没有解决。就换了种方式
引入依赖
<dependency><groupId>org.springframework</groupId><artifactId>springloaded</artifactId></dependency>添加build
<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><dependencies><!-- spring热部署 --><dependency><groupId>org.springframework</groupId><artifactId>springloaded</artifactId><version>1.2.7.RELEASE</version></dependency></dependencies></plugin></plugins></build>启动的时候需要debug启动,才能完成热部署。
有不对或者不周全的地方望大家指正
阅读全文
0 0
- SpringBoot(四):与dobbo的整合(注解形式与xml形式)
- SpringBoot(三):springboot整合mybatis(xml形式)
- Aspect 切点表达式(xml形式,非注解形式的)
- Spring定时器的使用(注解+xml形式)
- ++与 -- 操作符前缀形式与后缀形式的区别
- Spring的注解形式
- Spring的注解形式
- 注解形式的定时器
- SpringAop的注解形式
- 自己动手写spring(四) 整合xml与注解方式
- Spring学习(六)spring整合注解形式的hibernate
- 09-Spring-spring整合注解形式的hibernate
- 操作符++/--的前缀形式与后缀形式的区别
- javascript的数组形式与php的数组形式
- ftp传送形式:二进制与ascii形式的区别
- springMVC整合memcached,以注解形式使用
- springMVC整合memcached,以注解形式使用
- SpringBoot入门-16(springboot集成mybatis注解形式)
- ExtJS基本点总结
- 谷歌 火狐 主页被篡改,修改文件名解决
- C++修改图片像素大小,求梯度,创建文件夹并读取文件数据,
- 约束优化方法之拉格朗日乘子法与KKT条件
- ubuntu17.04将左侧启动栏/任务栏,放到桌面底部
- SpringBoot(四):与dobbo的整合(注解形式与xml形式)
- (lintcode)第29题交叉字符串
- JVM垃圾回收策略和垃圾收集器
- Mac下卸载Nginx服务器
- 伪类和伪元素的区别(结论)
- 最大递增序列之和
- ViewPager 的用法详解
- css选择器
- matter.js学习笔记(六)--Composites.softBody()制造布料或球网