springboot 整合dubbo两种配置方式
一、application.yml 方式
通过提供方和调用方 application.yml 配置
1、提供方 application.yml
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/my_test?useUnicode=true&characterEncoding=utf-8&useSSL=true
username: root
password: 123456
server:
port: 9207
#Mybatis 配置
mybatis:
type-aliases-package: com.demo.model
mapper-locations: classpath:com/demo/mapper/*Mapper.xml
#Dubbo 配置
dubbo:
application:
name: myProvider
registry:
protocol: zookeeper
address: localhost:2181
# 配置服务协议及端口
protocol:
name: dubbo
port: 20880
2、调用方 application.yml 配置
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/my_test?useUnicode=true&characterEncoding=utf-8&useSSL=true
username: root
password: 123456
server:
port: 9208
#Mybatis 配置
mybatis:
type-aliases-package: com.demo.model
mapper-locations: classpath:com/demo/mapper/*Mapper.xml
#Dubbo 配置
dubbo:
application:
name: myConsumer
registry:
protocol: zookeeper
address: localhost:2181
# 配置服务协议及端口
protocol:
name: dubbo
port: 20880
二、通过xml 配置
在提供方和调用方 resources 下增加 相关xml配置
1、提供方 resources 下增加 dubbo-provider.xml
<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="myProvider"/>
<!-- 注册中心配置,使用zookeeper注册中心暴露服务地址 -->
<dubbo:registry address="zookeeper://127.0.0.1:2181" timeout="60000" />
<!--关闭服务消费方所有服务的启动检查。dubbo缺省会在启动时检查依赖的服务是否可用,不可用时会抛出异常,阻止Spring初始化完成。-->
<dubbo:consumer check="false" />
<!-- 使用注解方式暴露接口,会自动扫描package下所有包中dubbo相关的注解,这样就不用在xml中再针对每个服务接口配置dubbo:service interface-->
<dubbo:annotation package="com.demo.provider"/>
<!-- 用dubbo协议在20880端口暴露服务 -->
<dubbo:protocol name="dubbo" port="20880" />
<!-- ********* 如果采用@Service自动注解,这些配置不需要 -->
<!-- 声明需要暴露的服务接口 -->
<!-- <dubbo:service interface="com.demo.dubbo.api.UserService" ref="userService" timeout="10000" version="1.0.0"/>-->
<!-- 和本地bean一样实现服务 -->
<!-- <bean id="userService" class="com.demo.provider.serviceImpl.UserServiceImpl" />-->
<!-- ********* 如果采用@Service自动注解,这些配置不需要 -->
</beans>
2、提供方启动代码修改,注入 dubbo-provider.xml
@SpringBootApplication
@EnableTransactionManagement //开启事务
@EnableSwagger2
@MapperScan("com.demo.dao")
@EnableDubbo
@ImportResource(value = {"classpath:dubbo-provider.xml"}) //注入 dubbo-provider.xml
public class ProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ProviderApplication.class, args);
}
}
3、调用方 resources 下增加 dubbo-consumer.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="myConsumer"/>
<!-- 注册中心配置,使用zookeeper注册中心暴露服务地址 -->
<dubbo:registry address="zookeeper://127.0.0.1:2181" timeout="60000" />
<!-- 使用注解方式创建远程服务代理-->
<dubbo:annotation package="com.demo.consumer"/>
<!-- ********* 如果采用@Service自动注解,这些配置不需要 -->
<!-- 生成远程服务代理,可以和本地bean一样使用demoService, mock 降级处理 -->
<!-- <dubbo:reference id="userService" interface="com.demo.dubbo.api.UserService" timeout="10000" check="false" mock="return 服务器开小差了...."> </dubbo:reference>-->
<!-- ********* 如果采用@Service自动注解,这些配置不需要 -->
</beans>
4、调用方启动代码修改,注入 dubbo-consumer.xml
@SpringBootApplication
@EnableTransactionManagement //开启事务
@EnableSwagger2
@MapperScan("com.demo.dao")
@EnableDubbo
@ImportResource(value = {"classpath:dubbo-consumer.xml"})//注入xml
public class ConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
}
}
springboot 整合dubbo两种注解方式
api 接口代码
public interface UserService {
String SayHello(String word);
}
一、采用@Service注解方式
1、提供方接口实现代码
@Component
//如果采用xml注解,这句不需要
@Service( version = "1.0.0",timeout = 10000,interfaceClass = UserService.class)
@Transactional(propagation = Propagation.REQUIRED, timeout=10) //不能catch,catch了事务不能回滚
public class UserServiceImpl implements UserService {
@Autowired
private UsersMapper usersMapper;
@Autowired
private UserAmtMapper userAmtMapper;
@Override
public String SayHello(String word) {
return "Hello " + word;
}
}
2、调用方调用代码
@RestController
@RequestMapping("/dubbo")
@Api(value = "dubbo测试模块")
public class UserController {
//注意版本号 可设置降级
@Reference(version = "1.0.0")
private UserService userService;
@RequestMapping(value="/sayHello",method = RequestMethod.GET)
@ApiImplicitParam(paramType = "query",name= "name" ,value = "用户名称",dataType = "String")
@ApiOperation(value = "dubbo测试", notes="返回dubbo测试")
public String sayHello(String name){
String result=userService.SayHello(name);
return result;
}
}
二、采用xml注解方式
1、提供方接口实现时不需要加@Service,调用方代码不变
@Component
//如果采用xml注解,这句不需要
//@Service( version = "1.0.0",timeout = 10000,interfaceClass = UserService.class)
@Transactional(propagation = Propagation.REQUIRED, timeout=10) //不能catch,catch了事务不能回滚
public class UserServiceImpl implements UserService {
@Autowired
private UsersMapper usersMapper;
@Autowired
private UserAmtMapper userAmtMapper;
@Override
public String SayHello(String word) {
return "Hello " + word;
}
}
2、提供方 dubbo-provider.xml 修改,增加服务配置 dubbo:service 和 bean
<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="myProvider"/>
<!-- 注册中心配置,使用zookeeper注册中心暴露服务地址 -->
<dubbo:registry address="zookeeper://127.0.0.1:2181" timeout="60000" />
<!--关闭服务消费方所有服务的启动检查。dubbo缺省会在启动时检查依赖的服务是否可用,不可用时会抛出异常,阻止Spring初始化完成。-->
<dubbo:consumer check="false" />
<!-- 使用注解方式暴露接口,会自动扫描package下所有包中dubbo相关的注解,这样就不用在xml中再针对每个服务接口配置dubbo:service interface-->
<dubbo:annotation package="com.demo.provider"/>
<!-- 用dubbo协议在20880端口暴露服务 -->
<dubbo:protocol name="dubbo" port="20880" />
<!-- ********* 如果采用@Service自动注解,这些配置不需要 -->
<!-- 声明需要暴露的服务接口 -->
<dubbo:service interface="com.demo.dubbo.api.UserService" ref="userService" timeout="10000" version="1.0.0"/>
<!-- 和本地bean一样实现服务 -->
<bean id="userService" class="com.demo.provider.serviceImpl.UserServiceImpl" />-->
<!-- ********* 如果采用@Service自动注解,这些配置不需要
</beans>
3、调用方 dubbo-consumer.xml 修改,增加服务配置 dubbo:reference
<?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="myConsumer"/>
<!-- 注册中心配置,使用zookeeper注册中心暴露服务地址 -->
<dubbo:registry address="zookeeper://127.0.0.1:2181" timeout="60000" />
<!-- 使用注解方式创建远程服务代理-->
<dubbo:annotation package="com.demo.consumer"/>
<!-- ********* 如果采用@Service自动注解,这些配置不需要 -->
<!-- 生成远程服务代理,可以和本地bean一样使用demoService, mock 降级处理 -->
<dubbo:reference id="userService" interface="com.demo.dubbo.api.UserService" timeout="10000" check="false" mock="return 服务器开小差了...."> </dubbo:reference>
<!-- ********* 如果采用@Service自动注解,这些配置不需要 -->
</beans>
注:
1、提供和调用时,注意版本号必须一致(或者都不带版本号),否则无法调通
2、dubbo 中 数据mode 必须要 Serializable,可在Mybatis 配置文件 generatorConfig.xml 中增加以下配置,逆向工程时自动生成(context节点中)
<plugin type="org.mybatis.generator.plugins.SerializablePlugin" />