springboot-dubbo整合的坑

之前用xml配置的方式集成了dubbo,手动写了在service通过自定义注解的方式对数据源的选择进行读写分离的操作。

发布服务后,dubbo调用服务时,对有自定义注解的serviceImpl方法进行拦截,这个时候AOP是有效的。

 

今天想把项目架构改成springboot的接口,通过API发布dubbo服务,但是在调用的时候,发现AOP失效了,目前估计是代理的原因,具体还在排查。

 

最终排查的结果就是采用如下的方式,各种问题全部解决:

@Configuration
@Data
public class DubboProviderConfig implements InitializingBean, ApplicationContextAware {

	private void fileServiceExport() {
		ServiceBean<FileService> config = new ServiceBean<FileService>();
		config.setRef(act.getBean(FileService.class));
		setConfig(config, FileService.class);
		MethodConfig method = new MethodConfig();
		method.setName("save");
		method.setRetries(0);
		List<MethodConfig> methods = new ArrayList<MethodConfig>();
		methods.add(method);
		config.setMethods(methods);
		config.setVersion("1.0.0");
		config.setTimeout(1200000);
		config.export();
	}

	private void setConfig(ServiceBean<?> serviceConfig, Class<?> c) {
		serviceConfig.setApplication(applicationConfig());
		serviceConfig.setRegistry(registryConfig());
		serviceConfig.setProtocol(protocolConfig());
		serviceConfig.setInterface(c);
	}

    @Override
	public void afterPropertiesSet() throws Exception {
		fileServiceExport();
	}

	@Override
	public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
		this.act = applicationContext;
	}

}

写一个单独的dubbo服务发布类,实现InitializingBean, ApplicationContextAware接口,在afterPropertiesSet方法中发布dubbo服务,这样就不需要在容器中注册ServiceBean<FileService>的bean了,而ServiceBean.setRef引用,直接引用spring的@service bean就行了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值