Migrate VCAP initializer to a listener
This commit is contained in:
@@ -14,7 +14,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.boot.context.initializer;
|
||||
package org.springframework.boot.context.listener;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
@@ -26,10 +26,11 @@ import java.util.Properties;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.springframework.boot.SpringApplicationEnvironmentAvailableEvent;
|
||||
import org.springframework.boot.config.JsonParser;
|
||||
import org.springframework.boot.config.JsonParserFactory;
|
||||
import org.springframework.context.ApplicationContextInitializer;
|
||||
import org.springframework.context.ConfigurableApplicationContext;
|
||||
import org.springframework.context.ApplicationListener;
|
||||
import org.springframework.core.Ordered;
|
||||
import org.springframework.core.env.CommandLinePropertySource;
|
||||
import org.springframework.core.env.ConfigurableEnvironment;
|
||||
@@ -87,11 +88,10 @@ import org.springframework.util.StringUtils;
|
||||
*
|
||||
* @author Dave Syer
|
||||
*/
|
||||
public class VcapApplicationContextInitializer implements
|
||||
ApplicationContextInitializer<ConfigurableApplicationContext>, Ordered {
|
||||
public class VcapApplicationListener implements
|
||||
ApplicationListener<SpringApplicationEnvironmentAvailableEvent>, Ordered {
|
||||
|
||||
private static final Log logger = LogFactory
|
||||
.getLog(VcapApplicationContextInitializer.class);
|
||||
private static final Log logger = LogFactory.getLog(VcapApplicationListener.class);
|
||||
|
||||
private static final String VCAP_APPLICATION = "VCAP_APPLICATION";
|
||||
|
||||
@@ -113,9 +113,9 @@ public class VcapApplicationContextInitializer implements
|
||||
}
|
||||
|
||||
@Override
|
||||
public void initialize(ConfigurableApplicationContext applicationContext) {
|
||||
public void onApplicationEvent(SpringApplicationEnvironmentAvailableEvent event) {
|
||||
|
||||
ConfigurableEnvironment environment = applicationContext.getEnvironment();
|
||||
ConfigurableEnvironment environment = event.getEnvironment();
|
||||
if (!environment.containsProperty(VCAP_APPLICATION)
|
||||
&& !environment.containsProperty(VCAP_SERVICES)) {
|
||||
return;
|
||||
@@ -2,11 +2,11 @@
|
||||
org.springframework.context.ApplicationContextInitializer=\
|
||||
org.springframework.boot.context.initializer.FileEncodingApplicationContextInitializer,\
|
||||
org.springframework.boot.context.initializer.ContextIdApplicationContextInitializer,\
|
||||
org.springframework.boot.context.initializer.EnvironmentDelegateApplicationContextInitializer,\
|
||||
org.springframework.boot.context.initializer.VcapApplicationContextInitializer
|
||||
org.springframework.boot.context.initializer.EnvironmentDelegateApplicationContextInitializer
|
||||
|
||||
# Application Listeners
|
||||
org.springframework.context.ApplicationListener=\
|
||||
org.springframework.boot.context.listener.VcapApplicationListener,\
|
||||
org.springframework.boot.context.listener.ConfigFileApplicationListener,\
|
||||
org.springframework.boot.context.listener.LoggingApplicationListener,\
|
||||
org.springframework.boot.liquibase.LiquibaseServiceLocatorInitializer
|
||||
|
||||
@@ -176,7 +176,7 @@ public class SpringApplicationBuilderTests {
|
||||
SpringApplicationBuilder application = new SpringApplicationBuilder(
|
||||
ExampleConfig.class).web(false);
|
||||
this.context = application.run();
|
||||
assertEquals(4, application.application().getInitializers().size());
|
||||
assertEquals(3, application.application().getInitializers().size());
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -184,7 +184,7 @@ public class SpringApplicationBuilderTests {
|
||||
SpringApplicationBuilder application = new SpringApplicationBuilder(
|
||||
ExampleConfig.class).child(ChildConfig.class).web(false);
|
||||
this.context = application.run();
|
||||
assertEquals(5, application.application().getInitializers().size());
|
||||
assertEquals(4, application.application().getInitializers().size());
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -198,7 +198,7 @@ public class SpringApplicationBuilderTests {
|
||||
}
|
||||
});
|
||||
this.context = application.run();
|
||||
assertEquals(5, application.application().getInitializers().size());
|
||||
assertEquals(4, application.application().getInitializers().size());
|
||||
}
|
||||
|
||||
@Configuration
|
||||
|
||||
@@ -14,9 +14,11 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.boot.context.initializer;
|
||||
package org.springframework.boot.context.listener;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.SpringApplicationEnvironmentAvailableEvent;
|
||||
import org.springframework.boot.TestUtils;
|
||||
import org.springframework.context.ConfigurableApplicationContext;
|
||||
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
|
||||
@@ -24,54 +26,53 @@ import org.springframework.context.annotation.AnnotationConfigApplicationContext
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
/**
|
||||
* Tests for {@link VcapApplicationContextInitializer}.
|
||||
* Tests for {@link VcapApplicationListener}.
|
||||
*
|
||||
* @author Dave Syer
|
||||
*/
|
||||
public class VcapApplicationContextInitializerTests {
|
||||
public class VcapApplicationListenerTests {
|
||||
|
||||
private VcapApplicationContextInitializer initializer = new VcapApplicationContextInitializer();
|
||||
private VcapApplicationListener initializer = new VcapApplicationListener();
|
||||
private ConfigurableApplicationContext context = new AnnotationConfigApplicationContext();
|
||||
private SpringApplicationEnvironmentAvailableEvent event = new SpringApplicationEnvironmentAvailableEvent(
|
||||
new SpringApplication(), this.context.getEnvironment(), new String[0]);
|
||||
|
||||
@Test
|
||||
public void testApplicationProperties() {
|
||||
ConfigurableApplicationContext context = new AnnotationConfigApplicationContext();
|
||||
TestUtils
|
||||
.addEnviroment(
|
||||
context,
|
||||
this.context,
|
||||
"VCAP_APPLICATION:{\"application_users\":[],\"instance_id\":\"bb7935245adf3e650dfb7c58a06e9ece\",\"instance_index\":0,\"version\":\"3464e092-1c13-462e-a47c-807c30318a50\",\"name\":\"foo\",\"uris\":[\"foo.cfapps.io\"],\"started_at\":\"2013-05-29 02:37:59 +0000\",\"started_at_timestamp\":1369795079,\"host\":\"0.0.0.0\",\"port\":61034,\"limits\":{\"mem\":128,\"disk\":1024,\"fds\":16384},\"version\":\"3464e092-1c13-462e-a47c-807c30318a50\",\"name\":\"dsyerenv\",\"uris\":[\"dsyerenv.cfapps.io\"],\"users\":[],\"start\":\"2013-05-29 02:37:59 +0000\",\"state_timestamp\":1369795079}");
|
||||
this.initializer.initialize(context);
|
||||
assertEquals("bb7935245adf3e650dfb7c58a06e9ece", context.getEnvironment()
|
||||
this.initializer.onApplicationEvent(this.event);
|
||||
assertEquals("bb7935245adf3e650dfb7c58a06e9ece", this.context.getEnvironment()
|
||||
.getProperty("vcap.application.instance_id"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUnparseableApplicationProperties() {
|
||||
ConfigurableApplicationContext context = new AnnotationConfigApplicationContext();
|
||||
TestUtils.addEnviroment(context, "VCAP_APPLICATION:");
|
||||
this.initializer.initialize(context);
|
||||
assertEquals(null, context.getEnvironment().getProperty("vcap"));
|
||||
TestUtils.addEnviroment(this.context, "VCAP_APPLICATION:");
|
||||
this.initializer.onApplicationEvent(this.event);
|
||||
assertEquals(null, this.context.getEnvironment().getProperty("vcap"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testNullApplicationProperties() {
|
||||
ConfigurableApplicationContext context = new AnnotationConfigApplicationContext();
|
||||
TestUtils
|
||||
.addEnviroment(
|
||||
context,
|
||||
this.context,
|
||||
"VCAP_APPLICATION:{\"application_users\":null,\"instance_id\":\"bb7935245adf3e650dfb7c58a06e9ece\",\"instance_index\":0,\"version\":\"3464e092-1c13-462e-a47c-807c30318a50\",\"name\":\"foo\",\"uris\":[\"foo.cfapps.io\"],\"started_at\":\"2013-05-29 02:37:59 +0000\",\"started_at_timestamp\":1369795079,\"host\":\"0.0.0.0\",\"port\":61034,\"limits\":{\"mem\":128,\"disk\":1024,\"fds\":16384},\"version\":\"3464e092-1c13-462e-a47c-807c30318a50\",\"name\":\"dsyerenv\",\"uris\":[\"dsyerenv.cfapps.io\"],\"users\":[],\"start\":\"2013-05-29 02:37:59 +0000\",\"state_timestamp\":1369795079}");
|
||||
this.initializer.initialize(context);
|
||||
assertEquals(null, context.getEnvironment().getProperty("vcap"));
|
||||
this.initializer.onApplicationEvent(this.event);
|
||||
assertEquals(null, this.context.getEnvironment().getProperty("vcap"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testServiceProperties() {
|
||||
ConfigurableApplicationContext context = new AnnotationConfigApplicationContext();
|
||||
TestUtils
|
||||
.addEnviroment(
|
||||
context,
|
||||
this.context,
|
||||
"VCAP_SERVICES:{\"rds-mysql-n/a\":[{\"name\":\"mysql\",\"label\":\"rds-mysql-n/a\",\"plan\":\"10mb\",\"credentials\":{\"name\":\"d04fb13d27d964c62b267bbba1cffb9da\",\"hostname\":\"mysql-service-public.clqg2e2w3ecf.us-east-1.rds.amazonaws.com\",\"host\":\"mysql-service-public.clqg2e2w3ecf.us-east-1.rds.amazonaws.com\",\"port\":3306,\"user\":\"urpRuqTf8Cpe6\",\"username\":\"urpRuqTf8Cpe6\",\"password\":\"pxLsGVpsC9A5S\"}}]}");
|
||||
this.initializer.initialize(context);
|
||||
this.initializer.onApplicationEvent(this.event);
|
||||
assertEquals("mysql",
|
||||
context.getEnvironment().getProperty("vcap.services.mysql.name"));
|
||||
this.context.getEnvironment().getProperty("vcap.services.mysql.name"));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user