From 86ff712398ca52776a3b72b4a59658ea90d9717b Mon Sep 17 00:00:00 2001 From: Spencer Gibb Date: Mon, 22 Feb 2016 10:49:54 -0700 Subject: [PATCH] Properly close child contexts in `destroy()` fixes gh-91 --- .../cloud/context/named/NamedContextFactory.java | 2 +- .../cloud/context/named/NamedContextFactoryTests.java | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/spring-cloud-context/src/main/java/org/springframework/cloud/context/named/NamedContextFactory.java b/spring-cloud-context/src/main/java/org/springframework/cloud/context/named/NamedContextFactory.java index 84457dde..aff694fd 100644 --- a/spring-cloud-context/src/main/java/org/springframework/cloud/context/named/NamedContextFactory.java +++ b/spring-cloud-context/src/main/java/org/springframework/cloud/context/named/NamedContextFactory.java @@ -62,10 +62,10 @@ public abstract class NamedContextFactory values = this.contexts.values(); - this.contexts.clear(); for (AnnotationConfigApplicationContext context : values) { context.close(); } + this.contexts.clear(); } protected AnnotationConfigApplicationContext getContext(String name) { diff --git a/spring-cloud-context/src/test/java/org/springframework/cloud/context/named/NamedContextFactoryTests.java b/spring-cloud-context/src/test/java/org/springframework/cloud/context/named/NamedContextFactoryTests.java index 0c6da498..a02ee26b 100644 --- a/spring-cloud-context/src/test/java/org/springframework/cloud/context/named/NamedContextFactoryTests.java +++ b/spring-cloud-context/src/test/java/org/springframework/cloud/context/named/NamedContextFactoryTests.java @@ -47,6 +47,16 @@ public class NamedContextFactoryTests { Map barBazes = factory.getInstances("bar", Baz.class); assertThat("barBazes was null", barBazes, is(notNullValue())); assertThat("barBazes size was wrong", barBazes.size(), is(2)); + + // get the contexts before destroy() to verify these are the old ones + AnnotationConfigApplicationContext fooContext = factory.getContext("foo"); + AnnotationConfigApplicationContext barContext = factory.getContext("bar"); + + factory.destroy(); + + assertThat("foo context wasn't closed", fooContext.isActive(), is(false)); + + assertThat("bar context wasn't closed", barContext.isActive(), is(false)); } private TestSpec getSpec(String name, Class configClass) {