package demo;
import javax.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.cloud.netflix.ribbon.RibbonClients;
import org.springframework.cloud.netflix.ribbon.SpringClientFactory;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.FilterType;
import com.netflix.loadbalancer.Server;
import com.netflix.loadbalancer.ServerList;
import com.netflix.loadbalancer.ZoneAwareLoadBalancer;
/**
* @author brenuart
*/
@ComponentScan(
// Exclude @Configuration classes that should be included only in sub contexts created
// by Ribbon's SpringClientFactory.
excludeFilters = { @ComponentScan.Filter(type = FilterType.REGEX, pattern = ".*RibbonConfig") })
@SpringBootApplication
@RibbonClients(defaultConfiguration = MyDefaultRibbonConfig.class)
@Configuration
public class RibbonDefaultConfigApplication {
@Autowired
private SpringClientFactory clientFactory;
/**
* Throws exception if the SpringClientFactory doesn't return a balancer with a server
* list of the expected type.
*
*/
@PostConstruct
public void test() throws Exception {
@SuppressWarnings("unchecked")
ZoneAwareLoadBalancer<Server> lb = (ZoneAwareLoadBalancer<Server>) this.clientFactory.getLoadBalancer("baz");
ServerList<Server> serverList = lb.getServerListImpl();
if (!(serverList instanceof MyDefaultRibbonConfig.BazServiceList)) {
throw new Exception("wrong server list type");
}
}
/**
* @param args
*/
public static void main(String[] args) {
SpringApplication app = new SpringApplicationBuilder(RibbonDefaultConfigApplication.class).build();
app.run(args);
}
}