springboot2 dubbo中实例的Configuration方式

dubbo的实例化配置有几种方式:

  • 导入dubbo-starter的jar包,通过xml文件的配置方式,然后使用@ImportResource导入dubbo的配置文件即可。
@ImportResource(locations="classpath:provider.xml")
  • 导入dubbo-starter的jar包,在application.properties配置属性。通过@Service/@Reference暴露和引入服务。使用@EnableDubbo开启注解Dubbo功能。或者配置包扫描
dubbo.scan.base-packages=com.ttt
或者
spring.dubbo.scan.basePackages = com.ttt
或者
@EnableDubbo(scanBasePackages="com.tttl")
  • 通过@Configuration配置方式,自定义处理。当然也需要配置包扫描路径,或者@EnableDubbo的
@Configuration
public class DubboConfiguration {

//<dubbo:application name="provider"></dubbo:application>
    @Bean
    public ApplicationConfig applicationConfig() {
        ApplicationConfig applicationConfig = new ApplicationConfig();
        applicationConfig.setName("provider");
        return applicationConfig;
    }

//<dubbo:registry protocol="zookeeper" address="127.0.0.1:2181"></dubbo:registry>
    @Bean
    public RegistryConfig registryConfig() {
        RegistryConfig registryConfig = new RegistryConfig();
        registryConfig.setAddress("zookeeper://127.0.0.1:2181");
        return registryConfig;
    }
//<dubbo:protocol name="dubbo" port="20882"></dubbo:protocol>
    @Bean
    public ProtocolConfig protocolConfig() {
        ProtocolConfig protocolConfig = new ProtocolConfig();
        protocolConfig.setName("dubbo");
        protocolConfig.setPort(20882);
        return protocolConfig;
    }
    
   @Bean
    public ServiceBean<UserAdapterApi> userAdapterApiBean(UserAdapterApi userAdapterApi){
        ServiceBean<UserAdapterApi> serviceBean = new ServiceBean<>();
        serviceBean.setInterface(UserAdapterApi.class);
        serviceBean.setRef(userAdapterApi);
        serviceConfig.setVersion("1.0.0");
        return serviceConfig;
    }
}

在结合springboot的时候。又要配置applicationConfig,感觉特别麻烦。提供一个更好的处理。
在追踪springboot和dubbo结合的代码中,可以看到dubbo对象实例化时,通过DubboProviderAutoConfiguration进行的。在父类DubboCommonAutoConfiguration中获取对应的配置信息。那我们就可以参考这样的实现。

package com.zcl.web.config;

import com.alibaba.dubbo.config.annotation.Reference;
import com.alibaba.dubbo.config.spring.ServiceBean;
import com.alibaba.dubbo.spring.boot.DubboAutoConfiguration;
import com.alibaba.dubbo.spring.boot.DubboCommonAutoConfiguration;
import com.alibaba.dubbo.spring.boot.DubboProperties;
import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;
import com.zcl.web.api.UserAdapterApi;
import com.zcl.web.mapper.CtUserMapper;
import com.api.IUserQueryService;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.annotation.Order;
import org.springframework.core.env.Environment;

/**
 * @author : chenglong.zhou
 * @date : 2020/1/3
 */
@Configuration
@ConditionalOnBean(annotation = EnableDubboConfiguration.class)
@AutoConfigureAfter(DubboAutoConfiguration.class)
@EnableConfigurationProperties(DubboProperties.class)
public class DubboConfiguration extends DubboCommonAutoConfiguration {

    @Autowired
    private ApplicationContext applicationContext;
    @Autowired
    private DubboProperties properties;
    @Reference
    private IUserQueryService iUserQueryService;

    @Bean(value = "userAdapterApi")
    public UserAdapterApi userAdapterApi(CtUserMapper ctUserMapper) {

        //UserFromDBAdapter userAdapterApi = new UserFromDBAdapter();
        //userAdapterApi.setCtUserMapper(ctUserMapper);

        UserFromUCAdapter userAdapterApi = new UserFromUCAdapter();
        userAdapterApi.setIUserQueryService(iUserQueryService);

        return userAdapterApi;
    }

    @Bean
    public ServiceBean<UserAdapterApi> userAdapterApiBean(UserAdapterApi userAdapterApi) {

        //UserAdapterApi userAdapterApi = applicationContext.getBean(UserAdapterApi.class);

        String beanName = userAdapterApi.getClass().getName();

        Environment environment = applicationContext.getEnvironment();

        ServiceBean<UserAdapterApi> serviceBean = new ServiceBean<>();
        serviceBean.setInterface(UserAdapterApi.class);
        serviceBean.setRef(userAdapterApi);

        serviceBean.setApplication(this.parseApplication(null, properties, environment,
                beanName, "application"));
        serviceBean.setModule(
                this.parseModule(null, properties, environment, beanName, "module"));
        serviceBean.setRegistries(
                this.parseRegistries(null, properties, environment, beanName, "registry"));
        serviceBean.setProtocols(
                this.parseProtocols(new String[]{}, properties, environment, beanName, "registry"));
        serviceBean.setMonitor(
                this.parseMonitor(null, properties, environment, beanName, "monitor"));
        serviceBean.setProvider(
                this.parseProvider(null, properties, environment, beanName, "provider"));

        return serviceBean;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值