Fixed formatting issues, added more tests
This commit is contained in:
@@ -80,29 +80,28 @@ public class SpringClientFactory extends NamedContextFactory<RibbonClientSpecifi
|
||||
}
|
||||
|
||||
static <C> C instantiateWithConfig(AnnotationConfigApplicationContext context,
|
||||
Class<C> clazz, IClientConfig config) {
|
||||
Class<C> clazz, IClientConfig config) {
|
||||
C result = null;
|
||||
|
||||
|
||||
try {
|
||||
Constructor<C> constructor = clazz.getConstructor(IClientConfig.class);
|
||||
result = constructor.newInstance(config);
|
||||
}
|
||||
catch (Throwable e) {
|
||||
} catch (Throwable e) {
|
||||
// Ignored
|
||||
}
|
||||
|
||||
|
||||
if (result == null) {
|
||||
result = BeanUtils.instantiate(clazz);
|
||||
|
||||
|
||||
if (result instanceof IClientConfigAware) {
|
||||
((IClientConfigAware) result).initWithNiwsConfig(config);
|
||||
}
|
||||
|
||||
|
||||
if (context != null) {
|
||||
context.getAutowireCapableBeanFactory().autowireBean(result);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -120,4 +119,6 @@ public class SpringClientFactory extends NamedContextFactory<RibbonClientSpecifi
|
||||
protected AnnotationConfigApplicationContext getContext(String name) {
|
||||
return super.getContext(name);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -164,7 +164,7 @@ public class ZuulConfiguration {
|
||||
}
|
||||
|
||||
@Bean
|
||||
@ConditionalOnProperty(value = "zuul.context.startup.enabled", matchIfMissing = false)
|
||||
@ConditionalOnProperty(value = "zuul.ribbon.eager-load", matchIfMissing = false)
|
||||
public ZuulRouteApplicationContextInitializer zuulRoutesApplicationContextInitiazer(
|
||||
SpringClientFactory springClientFactory) {
|
||||
return new ZuulRouteApplicationContextInitializer(springClientFactory,
|
||||
|
||||
@@ -6,7 +6,6 @@ import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.cloud.netflix.archaius.ArchaiusAutoConfiguration;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.test.annotation.DirtiesContext;
|
||||
@@ -16,7 +15,6 @@ import java.util.Arrays;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.springframework.boot.test.util.EnvironmentTestUtils.addEnvironment;
|
||||
|
||||
/**
|
||||
* @author Biju Kunjummen
|
||||
@@ -43,7 +41,6 @@ public class RibbonApplicationContextInitializerTests {
|
||||
assertThat(foo).isNotNull();
|
||||
}
|
||||
|
||||
@Configuration
|
||||
static class FooConfig {
|
||||
|
||||
@Bean
|
||||
|
||||
@@ -0,0 +1,59 @@
|
||||
package org.springframework.cloud.netflix.zuul.filters.route;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.cloud.netflix.ribbon.RibbonClient;
|
||||
import org.springframework.cloud.netflix.ribbon.RibbonClients;
|
||||
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.test.annotation.DirtiesContext;
|
||||
import org.springframework.test.context.junit4.SpringRunner;
|
||||
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
@RunWith(SpringRunner.class)
|
||||
@SpringBootTest(value = { "zuul.routes.myroute.service-id=eager",
|
||||
"zuul.ribbon.eager-load=true" })
|
||||
@DirtiesContext
|
||||
public class EagerLoadOfZuulConfigurationTests {
|
||||
|
||||
@Test
|
||||
public void testEagerLoading() {
|
||||
// Child context FooConfig should have been eagerly instantiated..
|
||||
assertThat(Foo.getInstanceCount()).isEqualTo(1);
|
||||
}
|
||||
|
||||
@EnableAutoConfiguration
|
||||
@Configuration
|
||||
@EnableZuulProxy
|
||||
@RibbonClients(@RibbonClient(name = "eager", configuration = FooConfig.class))
|
||||
static class TestConfig {
|
||||
|
||||
}
|
||||
|
||||
static class Foo {
|
||||
private static final AtomicInteger INSTANCE_COUNT = new AtomicInteger();
|
||||
|
||||
public Foo() {
|
||||
INSTANCE_COUNT.incrementAndGet();
|
||||
}
|
||||
|
||||
public static int getInstanceCount() {
|
||||
return INSTANCE_COUNT.get();
|
||||
}
|
||||
}
|
||||
|
||||
static class FooConfig {
|
||||
|
||||
@Bean
|
||||
public Foo foo() {
|
||||
return new Foo();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,101 @@
|
||||
package org.springframework.cloud.netflix.zuul.filters.route;
|
||||
|
||||
import com.netflix.loadbalancer.Server;
|
||||
import com.netflix.loadbalancer.ServerList;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.boot.test.web.client.TestRestTemplate;
|
||||
import org.springframework.cloud.netflix.ribbon.RibbonClient;
|
||||
import org.springframework.cloud.netflix.ribbon.RibbonClients;
|
||||
import org.springframework.cloud.netflix.ribbon.StaticServerList;
|
||||
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.test.annotation.DirtiesContext;
|
||||
import org.springframework.test.context.junit4.SpringRunner;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
@RunWith(SpringRunner.class)
|
||||
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, value = {
|
||||
"zuul.routes.myroute.service-id=eager", "zuul.routes.myroute.path=/eager/**" })
|
||||
@DirtiesContext
|
||||
public class LazyLoadOfZuulConfigurationTests {
|
||||
|
||||
@Value("${local.server.port}")
|
||||
protected int port;
|
||||
|
||||
@Test
|
||||
public void testEagerLoading() {
|
||||
// Child context FooConfig should be lazily created..
|
||||
assertThat(Foo.getInstanceCount()).isEqualTo(0);
|
||||
|
||||
String uri = String.format("http://localhost:%d/eager/sample", this.port);
|
||||
|
||||
ResponseEntity<String> result = new TestRestTemplate().getForEntity(uri,
|
||||
String.class);
|
||||
|
||||
// the instance should be available now..
|
||||
assertThat(Foo.getInstanceCount()).isEqualTo(1);
|
||||
|
||||
assertThat(result.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||
assertThat(result.getBody()).isEqualTo("sample");
|
||||
}
|
||||
|
||||
@EnableAutoConfiguration
|
||||
@Configuration
|
||||
@EnableZuulProxy
|
||||
@RibbonClients(@RibbonClient(name = "eager", configuration = FooConfig.class))
|
||||
static class TestConfig {
|
||||
|
||||
}
|
||||
|
||||
static class Foo {
|
||||
private static final AtomicInteger INSTANCE_COUNT = new AtomicInteger();
|
||||
|
||||
public Foo() {
|
||||
INSTANCE_COUNT.incrementAndGet();
|
||||
}
|
||||
|
||||
public static int getInstanceCount() {
|
||||
return INSTANCE_COUNT.get();
|
||||
}
|
||||
}
|
||||
|
||||
static class FooConfig {
|
||||
|
||||
@Bean
|
||||
public Foo foo() {
|
||||
return new Foo();
|
||||
}
|
||||
|
||||
@Value("${local.server.port}")
|
||||
private int port;
|
||||
|
||||
@Bean
|
||||
public ServerList<Server> ribbonServerList() {
|
||||
return new StaticServerList<>(new Server("localhost", this.port));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Configuration
|
||||
@RestController
|
||||
static class SampleWebConfig {
|
||||
|
||||
@RequestMapping("/sample")
|
||||
public String sampleEndpoint() {
|
||||
return "sample";
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user