Register env repo properties as beans.
The `CompositeEnvironmentBeanFactoryPostProcessor` binds the required properties for a EnvironmentRepositoryFactory, but does not register it as a bean. This is now done with a supplier to the bound instance. Fixes gh-1720
This commit is contained in:
@@ -29,6 +29,7 @@ import org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointPr
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.boot.test.web.client.TestRestTemplate;
|
||||
import org.springframework.boot.web.server.LocalServerPort;
|
||||
import org.springframework.cloud.config.server.environment.MultipleJGitEnvironmentProperties;
|
||||
import org.springframework.cloud.config.server.test.ConfigServerTestUtils;
|
||||
import org.springframework.context.ConfigurableApplicationContext;
|
||||
import org.springframework.test.context.junit4.SpringRunner;
|
||||
@@ -107,4 +108,12 @@ public class ApplicationBootstrapTests {
|
||||
assertThat(property).containsEntry("value", "bar");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void propertiesBeansRegisterByCompositeEnvBeanFactoryPostProcessor() {
|
||||
String[] beanNames = server
|
||||
.getBeanNamesForType(MultipleJGitEnvironmentProperties.class);
|
||||
assertThat(beanNames).isNotNull()
|
||||
.anyMatch(s -> s.matches("git-env-repo-properties\\d"));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -46,9 +46,12 @@ public class CompositeEnvironmentBeanFactoryPostProcessor
|
||||
this.environment = environment;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory)
|
||||
throws BeansException {
|
||||
BeanDefinitionRegistry registry = (BeanDefinitionRegistry) beanFactory;
|
||||
|
||||
List<String> typePropertyList = CompositeUtils
|
||||
.getCompositeTypeList(this.environment);
|
||||
for (int i = 0; i < typePropertyList.size(); i++) {
|
||||
@@ -61,13 +64,19 @@ public class CompositeEnvironmentBeanFactoryPostProcessor
|
||||
propertiesClass = (Class<? extends EnvironmentRepositoryProperties>) factoryTypes[1];
|
||||
EnvironmentRepositoryProperties properties = bindProperties(i,
|
||||
propertiesClass, this.environment);
|
||||
AbstractBeanDefinition propertiesDefinition = BeanDefinitionBuilder
|
||||
.genericBeanDefinition(EnvironmentRepositoryProperties.class,
|
||||
() -> properties)
|
||||
.getBeanDefinition();
|
||||
String propertiesBeanName = String.format("%s-env-repo-properties%d", type,
|
||||
i);
|
||||
registry.registerBeanDefinition(propertiesBeanName, propertiesDefinition);
|
||||
|
||||
AbstractBeanDefinition beanDefinition = BeanDefinitionBuilder
|
||||
.genericBeanDefinition(EnvironmentRepository.class)
|
||||
.setFactoryMethodOnBean("build", factoryName)
|
||||
.addConstructorArgValue(properties).getBeanDefinition();
|
||||
String beanName = String.format("%s-env-repo%d", type, i);
|
||||
BeanDefinitionRegistry registry = (BeanDefinitionRegistry) beanFactory;
|
||||
registry.registerBeanDefinition(beanName, beanDefinition);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user