package com.jthink.skyeye.data.dubbox;
import com.alibaba.dubbo.config.ApplicationConfig;
import com.alibaba.dubbo.config.ProtocolConfig;
import com.alibaba.dubbo.config.RegistryConfig;
import com.alibaba.dubbo.config.utils.ReferenceConfigCache;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* JThink@JThink
*
* @author JThink
* @version 0.0.1
* @desc dubbo auto configuration
* @date 2016-12-15 15:08:57
*/
@Configuration
@EnableConfigurationProperties(DubboProperties.class)
@ConditionalOnClass(DubboService.class)
public class DubboAutoConfiguration {
@Autowired
private DubboProperties dubboProperties;
@Bean
public ReferenceConfigCache referenceConfigCache() {
return ReferenceConfigCache.getCache();
}
@Bean
public ApplicationConfig applicationConfig() {
return new ApplicationConfig(this.dubboProperties.getName());
}
@Bean
public RegistryConfig registryConfig() {
RegistryConfig registryConfig = new RegistryConfig(this.dubboProperties.getAddress());
registryConfig.setCheck(this.dubboProperties.isCheck());
registryConfig.setRegister(this.dubboProperties.isRegister());
registryConfig.setProtocol(this.dubboProperties.getProtocol());
return registryConfig;
}
@Bean
public ProtocolConfig protocolConfig() {
if (null == this.dubboProperties.getProtocolName() || null == this.dubboProperties.getPayload()) {
return null;
}
ProtocolConfig protocolConfig = new ProtocolConfig();
protocolConfig.setPort(-1);
protocolConfig.setPayload(this.dubboProperties.getPayload());
return protocolConfig;
}
@Bean
public DubboService dubboService(ApplicationConfig applicationConfig, RegistryConfig registryConfig, ProtocolConfig protocolConfig, ReferenceConfigCache referenceConfigCache) {
if (null == protocolConfig) {
return new DubboService(applicationConfig, registryConfig, this.dubboProperties, referenceConfigCache);
}
return new DubboService(applicationConfig, registryConfig, protocolConfig, this.dubboProperties, referenceConfigCache);
}
}