Fix ordering issues in environment repository config
This commit is contained in:
@@ -30,6 +30,7 @@ import org.springframework.cloud.config.server.environment.SvnKitEnvironmentRepo
|
||||
import org.springframework.cloud.config.server.environment.VaultEnvironmentRepository;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.context.annotation.Import;
|
||||
import org.springframework.context.annotation.Profile;
|
||||
import org.springframework.core.env.ConfigurableEnvironment;
|
||||
import org.springframework.web.client.RestTemplate;
|
||||
@@ -40,83 +41,18 @@ import org.springframework.web.client.RestTemplate;
|
||||
*
|
||||
*/
|
||||
@Configuration
|
||||
@Import({ VaultRepositoryConfiguration.class, SvnRepositoryConfiguration.class,
|
||||
NativeRepositoryConfiguration.class, GitRepositoryConfiguration.class,
|
||||
DefaultRepositoryConfiguration.class })
|
||||
public class EnvironmentRepositoryConfiguration {
|
||||
|
||||
@Bean
|
||||
@ConditionalOnProperty(value = "spring.cloud.config.server.health.enabled", matchIfMissing = true)
|
||||
public ConfigServerHealthIndicator configServerHealthIndicator(EnvironmentRepository repository) {
|
||||
public ConfigServerHealthIndicator configServerHealthIndicator(
|
||||
EnvironmentRepository repository) {
|
||||
return new ConfigServerHealthIndicator(repository);
|
||||
}
|
||||
|
||||
@Configuration
|
||||
@ConditionalOnMissingBean(EnvironmentRepository.class)
|
||||
protected static class DefaultRepositoryConfiguration {
|
||||
|
||||
@Autowired
|
||||
private ConfigurableEnvironment environment;
|
||||
|
||||
@Autowired
|
||||
private ConfigServerProperties server;
|
||||
|
||||
@Autowired(required = false)
|
||||
private TransportConfigCallback transportConfigCallback;
|
||||
|
||||
@Bean
|
||||
public MultipleJGitEnvironmentRepository defaultEnvironmentRepository() {
|
||||
MultipleJGitEnvironmentRepository repository = new MultipleJGitEnvironmentRepository(this.environment);
|
||||
repository.setTransportConfigCallback(this.transportConfigCallback);
|
||||
if (this.server.getDefaultLabel()!=null) {
|
||||
repository.setDefaultLabel(this.server.getDefaultLabel());
|
||||
}
|
||||
return repository;
|
||||
}
|
||||
}
|
||||
|
||||
@Configuration
|
||||
@Profile("native")
|
||||
protected static class NativeRepositoryConfiguration {
|
||||
|
||||
@Autowired
|
||||
private ConfigurableEnvironment environment;
|
||||
|
||||
@Bean
|
||||
public NativeEnvironmentRepository nativeEnvironmentRepository() {
|
||||
return new NativeEnvironmentRepository(this.environment);
|
||||
}
|
||||
}
|
||||
|
||||
@Configuration
|
||||
@Profile("git")
|
||||
protected static class GitRepositoryConfiguration extends DefaultRepositoryConfiguration {}
|
||||
|
||||
@Configuration
|
||||
@Profile("subversion")
|
||||
protected static class SvnRepositoryConfiguration {
|
||||
@Autowired
|
||||
private ConfigurableEnvironment environment;
|
||||
|
||||
@Autowired
|
||||
private ConfigServerProperties server;
|
||||
|
||||
@Bean
|
||||
public SvnKitEnvironmentRepository svnKitEnvironmentRepository() {
|
||||
SvnKitEnvironmentRepository repository = new SvnKitEnvironmentRepository(this.environment);
|
||||
if (this.server.getDefaultLabel()!=null) {
|
||||
repository.setDefaultLabel(this.server.getDefaultLabel());
|
||||
}
|
||||
return repository;
|
||||
}
|
||||
}
|
||||
|
||||
@Configuration
|
||||
@Profile("vault")
|
||||
protected static class VaultConfiguration {
|
||||
@Bean
|
||||
public VaultEnvironmentRepository vaultEnvironmentRepository(HttpServletRequest request, EnvironmentWatch watch) {
|
||||
return new VaultEnvironmentRepository(request, watch, new RestTemplate());
|
||||
}
|
||||
}
|
||||
|
||||
@Configuration
|
||||
@ConditionalOnProperty(value = "spring.cloud.config.server.consul.watch.enabled")
|
||||
protected static class ConsulEnvironmentWatchConfiguration {
|
||||
@@ -137,3 +73,77 @@ public class EnvironmentRepositoryConfiguration {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Configuration
|
||||
@ConditionalOnMissingBean(EnvironmentRepository.class)
|
||||
class DefaultRepositoryConfiguration {
|
||||
|
||||
@Autowired
|
||||
private ConfigurableEnvironment environment;
|
||||
|
||||
@Autowired
|
||||
private ConfigServerProperties server;
|
||||
|
||||
@Autowired(required = false)
|
||||
private TransportConfigCallback transportConfigCallback;
|
||||
|
||||
@Bean
|
||||
public MultipleJGitEnvironmentRepository defaultEnvironmentRepository() {
|
||||
MultipleJGitEnvironmentRepository repository = new MultipleJGitEnvironmentRepository(
|
||||
this.environment);
|
||||
repository.setTransportConfigCallback(this.transportConfigCallback);
|
||||
if (this.server.getDefaultLabel() != null) {
|
||||
repository.setDefaultLabel(this.server.getDefaultLabel());
|
||||
}
|
||||
return repository;
|
||||
}
|
||||
}
|
||||
|
||||
@Configuration
|
||||
@ConditionalOnMissingBean(EnvironmentRepository.class)
|
||||
@Profile("native")
|
||||
class NativeRepositoryConfiguration {
|
||||
|
||||
@Autowired
|
||||
private ConfigurableEnvironment environment;
|
||||
|
||||
@Bean
|
||||
public NativeEnvironmentRepository nativeEnvironmentRepository() {
|
||||
return new NativeEnvironmentRepository(this.environment);
|
||||
}
|
||||
}
|
||||
|
||||
@Configuration
|
||||
@Profile("git")
|
||||
class GitRepositoryConfiguration extends DefaultRepositoryConfiguration {
|
||||
}
|
||||
|
||||
@Configuration
|
||||
@Profile("subversion")
|
||||
class SvnRepositoryConfiguration {
|
||||
@Autowired
|
||||
private ConfigurableEnvironment environment;
|
||||
|
||||
@Autowired
|
||||
private ConfigServerProperties server;
|
||||
|
||||
@Bean
|
||||
public SvnKitEnvironmentRepository svnKitEnvironmentRepository() {
|
||||
SvnKitEnvironmentRepository repository = new SvnKitEnvironmentRepository(
|
||||
this.environment);
|
||||
if (this.server.getDefaultLabel() != null) {
|
||||
repository.setDefaultLabel(this.server.getDefaultLabel());
|
||||
}
|
||||
return repository;
|
||||
}
|
||||
}
|
||||
|
||||
@Configuration
|
||||
@Profile("vault")
|
||||
class VaultRepositoryConfiguration {
|
||||
@Bean
|
||||
public VaultEnvironmentRepository vaultEnvironmentRepository(
|
||||
HttpServletRequest request, EnvironmentWatch watch) {
|
||||
return new VaultEnvironmentRepository(request, watch, new RestTemplate());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,9 +15,6 @@
|
||||
*/
|
||||
package org.springframework.cloud.config.server.environment;
|
||||
|
||||
import static org.springframework.cloud.config.server.support.EnvironmentPropertySource.prepareEnvironment;
|
||||
import static org.springframework.cloud.config.server.support.EnvironmentPropertySource.resolvePlaceholders;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
@@ -31,6 +28,12 @@ import java.util.TreeMap;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
|
||||
import org.yaml.snakeyaml.DumperOptions.FlowStyle;
|
||||
import org.yaml.snakeyaml.Yaml;
|
||||
import org.yaml.snakeyaml.nodes.Tag;
|
||||
|
||||
import org.springframework.cloud.config.environment.Environment;
|
||||
import org.springframework.cloud.config.environment.PropertySource;
|
||||
import org.springframework.http.HttpHeaders;
|
||||
@@ -42,13 +45,10 @@ import org.springframework.web.bind.annotation.PathVariable;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMethod;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.ResponseStatus;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import org.yaml.snakeyaml.DumperOptions.FlowStyle;
|
||||
import org.yaml.snakeyaml.Yaml;
|
||||
import org.yaml.snakeyaml.nodes.Tag;
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import static org.springframework.cloud.config.server.support.EnvironmentPropertySource.prepareEnvironment;
|
||||
import static org.springframework.cloud.config.server.support.EnvironmentPropertySource.resolvePlaceholders;
|
||||
|
||||
/**
|
||||
* @author Dave Syer
|
||||
@@ -345,6 +345,7 @@ public class EnvironmentController {
|
||||
private void setMapValue(Map<String, Object> map, Object value) {
|
||||
String key = getKey();
|
||||
if (NodeType.MAP.equals(valueType)) {
|
||||
@SuppressWarnings("unchecked")
|
||||
Map<String, Object> nestedMap = (Map<String, Object>) map.get(key);
|
||||
if (nestedMap == null) {
|
||||
nestedMap = new LinkedHashMap<>();
|
||||
@@ -352,6 +353,7 @@ public class EnvironmentController {
|
||||
}
|
||||
setMapValue(nestedMap, value);
|
||||
} else if (NodeType.ARRAY.equals(valueType)) {
|
||||
@SuppressWarnings("unchecked")
|
||||
List<Object> list = (List<Object>) map.get(key);
|
||||
if (list == null) {
|
||||
list = new ArrayList<>();
|
||||
@@ -370,6 +372,7 @@ public class EnvironmentController {
|
||||
list.add(null);
|
||||
}
|
||||
if (NodeType.MAP.equals(valueType)) {
|
||||
@SuppressWarnings("unchecked")
|
||||
Map<String, Object> map = (Map<String, Object>) list.get(index);
|
||||
if (map == null) {
|
||||
map = new LinkedHashMap<>();
|
||||
@@ -377,6 +380,7 @@ public class EnvironmentController {
|
||||
}
|
||||
setMapValue(map, value);
|
||||
} else if (NodeType.ARRAY.equals(valueType)) {
|
||||
@SuppressWarnings("unchecked")
|
||||
List<Object> nestedList = (List<Object>) list.get(index);
|
||||
if (nestedList == null) {
|
||||
nestedList = new ArrayList<>();
|
||||
|
||||
@@ -42,10 +42,10 @@ import static org.springframework.boot.test.context.SpringBootTest.WebEnvironmen
|
||||
* @author Roy Clarkson
|
||||
*/
|
||||
@RunWith(SpringRunner.class)
|
||||
@SpringBootTest(classes = ConfigServerApplication.class,
|
||||
properties = { "spring.config.name:configserver",
|
||||
"spring.cloud.config.server.svn.uri:file:///./target/repos/svn-config-repo" },
|
||||
webEnvironment = RANDOM_PORT)
|
||||
@SpringBootTest(classes = ConfigServerApplication.class, properties = {
|
||||
"spring.config.name:configserver",
|
||||
"spring.cloud.config.server.svn.uri:file:///./target/repos/svn-config-repo",
|
||||
"logging.level.org.springframework.cloud=DEBUG" }, webEnvironment = RANDOM_PORT)
|
||||
@ActiveProfiles("subversion")
|
||||
public class SubversionConfigServerIntegrationTests {
|
||||
|
||||
@@ -63,12 +63,12 @@ public class SubversionConfigServerIntegrationTests {
|
||||
|
||||
@Test
|
||||
public void contextLoads() {
|
||||
Environment environment = new TestRestTemplate().getForObject("http://localhost:"
|
||||
+ this.port + "/foo/development/", Environment.class);
|
||||
Environment environment = new TestRestTemplate().getForObject(
|
||||
"http://localhost:" + this.port + "/foo/development/", Environment.class);
|
||||
assertFalse(environment.getPropertySources().isEmpty());
|
||||
assertEquals("overrides", environment.getPropertySources().get(0).getName());
|
||||
assertEquals("{spring.cloud.config.enabled=true}", environment
|
||||
.getPropertySources().get(0).getSource().toString());
|
||||
assertEquals("{spring.cloud.config.enabled=true}",
|
||||
environment.getPropertySources().get(0).getSource().toString());
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
Reference in New Issue
Block a user