blob: e9199955ca37f3201f6b7ea5aa5d85c1101cea5b [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.servicecomb.config;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import org.apache.commons.configuration.AbstractConfiguration;
import org.apache.commons.configuration.Configuration;
import org.apache.commons.configuration.PropertyConverter;
import org.apache.commons.configuration.SubsetConfiguration;
import org.apache.commons.lang3.StringUtils;
/**
* This class holds configurations that need to be configured
* through property files or environment variables.
*/
public class BootStrapProperties {
// start of : service definition keys
// service definition keys of old version
public static final String OLD_CONFIG_SERVICE_APPLICATION = "APPLICATION_ID";
public static final String OLD_CONFIG_SERVICE_NAME = "service_description.name";
public static final String OLD_CONFIG_SERVICE_VERSION = "service_description.version";
public static final String OLD_CONFIG_SERVICE_ROLE = "service_description.role";
public static final String OLD_CONFIG_SERVICE_DESCRIPTION = "service_description.description";
public static final String OLD_CONFIG_SERVICE_ENVIRONMENT = "service_description.environment";
public static final String OLD_CONFIG_SERVICE_EXTENDED_CLASS = "service_description.propertyExtendedClass";
public static final String OLD_CONFIG_SERVICE_PROPERTIES = "service_description.properties";
public static final String OLD_CONFIG_SERVICE_PATHS = "service_description.paths";
// service instance definition keys of old version
public static final String OLD_CONFIG_SERVICE_INSTANCE_PROPERTIES = "instance_description.properties";
public static final String OLD_CONFIG_SERVICE_INSTANCE_EXTENDED_CLASS = "instance_description.propertyExtendedClass";
public static final String OLD_CONFIG_SERVICE_INSTANCE_ENVIRONMENT = "instance_description.environment";
public static final String OLD_CONFIG_SERVICE_INSTANCE_INITIAL_STATUS = "instance_description.initialStatus";
private static final String OLD_CONFIG_SERVICE_INSTANCE_TAGS = "instance_description.properties.tags";
// service definition keys of new version
public static final String CONFIG_SERVICE_APPLICATION = "servicecomb.service.application";
public static final String CONFIG_SERVICE_NAME = "servicecomb.service.name";
public static final String CONFIG_SERVICE_VERSION = "servicecomb.service.version";
public static final String CONFIG_SERVICE_ROLE = "servicecomb.service.role";
public static final String CONFIG_SERVICE_DESCRIPTION = "servicecomb.service.description";
public static final String CONFIG_SERVICE_ENVIRONMENT = "servicecomb.service.environment";
public static final String CONFIG_SERVICE_EXTENDED_CLASS = "servicecomb.service.propertyExtendedClass";
public static final String CONFIG_SERVICE_PROPERTIES = "servicecomb.service.properties";
public static final String CONFIG_SERVICE_PATHS = "servicecomb.service.paths";
// service instance definition keys of new version
public static final String CONFIG_SERVICE_INSTANCE_PROPERTIES = "servicecomb.instance.properties";
public static final String CONFIG_SERVICE_INSTANCE_EXTENDED_CLASS = "servicecomb.instance.propertyExtendedClass";
public static final String CONFIG_SERVICE_INSTANCE_ENVIRONMENT = "servicecomb.instance.environment";
public static final String CONFIG_SERVICE_INSTANCE_INITIAL_STATUS = "servicecomb.instance.initialStatus";
private static final String CONFIG_SERVICE_INSTANCE_TAGS = "servicecomb.instance.properties.tags";
// configuration default values
public static final String DEFAULT_APPLICATION = "default";
public static final String DEFAULT_MICROSERVICE_NAME = "defaultMicroservice";
public static final String DEFAULT_MICROSERVICE_VERSION = "1.0.0.0";
public static final String DEFAULT_MICROSERVICE_ROLE = "FRONT";
public static final String DEFAULT_MICROSERVICE_ENVIRONMENT = "";
public static final String DEFAULT_MICROSERVICE_INSTANCE_ENVIRONMENT = "production";
public static final String DEFAULT_MICROSERVICE_INSTANCE_INITIAL_STATUS = "UP";
private static final Configuration configuration = ConfigUtil.createLocalConfig();
public static String readApplication(Configuration configuration) {
return readStringValue(configuration, CONFIG_SERVICE_APPLICATION,
OLD_CONFIG_SERVICE_APPLICATION, DEFAULT_APPLICATION);
}
public static String readApplication() {
return readApplication(BootStrapProperties.configuration);
}
public static String readServiceName(Configuration configuration) {
String result = readStringValue(configuration, CONFIG_SERVICE_NAME, OLD_CONFIG_SERVICE_NAME,
DEFAULT_MICROSERVICE_NAME);
checkMicroserviceName(result);
return result;
}
public static String readServiceName() {
return readServiceName(BootStrapProperties.configuration);
}
public static String readServiceVersion(Configuration configuration) {
return readStringValue(configuration, CONFIG_SERVICE_VERSION, OLD_CONFIG_SERVICE_VERSION,
DEFAULT_MICROSERVICE_VERSION);
}
public static String readServiceVersion() {
return readServiceVersion(BootStrapProperties.configuration);
}
public static String readServiceRole(Configuration configuration) {
return readStringValue(configuration, CONFIG_SERVICE_ROLE, OLD_CONFIG_SERVICE_ROLE, DEFAULT_MICROSERVICE_ROLE);
}
public static String readServiceRole() {
return readServiceRole(BootStrapProperties.configuration);
}
public static String readServiceDescription(Configuration configuration) {
String[] descriptionArray = configuration.getStringArray(CONFIG_SERVICE_DESCRIPTION);
if (null == descriptionArray || descriptionArray.length < 1) {
descriptionArray = configuration.getStringArray(OLD_CONFIG_SERVICE_DESCRIPTION);
}
if (null == descriptionArray || descriptionArray.length < 1) {
return null;
}
StringBuilder rawDescriptionBuilder = new StringBuilder();
for (String desc : descriptionArray) {
rawDescriptionBuilder.append(desc).append(",");
}
return rawDescriptionBuilder.substring(0, rawDescriptionBuilder.length() - 1);
}
public static String readServiceDescription() {
return readServiceDescription(BootStrapProperties.configuration);
}
public static String readServiceEnvironment(Configuration configuration) {
return readStringValue(configuration, CONFIG_SERVICE_ENVIRONMENT, OLD_CONFIG_SERVICE_ENVIRONMENT,
DEFAULT_MICROSERVICE_ENVIRONMENT);
}
public static String readServiceEnvironment() {
return readServiceEnvironment(BootStrapProperties.configuration);
}
public static String readServiceExtendedClass(Configuration configuration) {
return readStringValue(configuration, CONFIG_SERVICE_EXTENDED_CLASS, OLD_CONFIG_SERVICE_EXTENDED_CLASS,
null);
}
public static String readServiceExtendedClass() {
return readServiceExtendedClass(BootStrapProperties.configuration);
}
public static Map<String, String> readServiceProperties(Configuration configuration) {
return readProperties(configuration, CONFIG_SERVICE_PROPERTIES, OLD_CONFIG_SERVICE_PROPERTIES);
}
public static Map<String, String> readServiceProperties() {
return readServiceProperties(BootStrapProperties.configuration);
}
public static List<Object> readServicePaths(Configuration configuration) {
List<Object> result = configuration.getList(CONFIG_SERVICE_PATHS);
if (result == null || result.isEmpty()) {
result = configuration.getList(OLD_CONFIG_SERVICE_PATHS);
}
return result;
}
public static List<Object> readServicePaths() {
return readServicePaths(BootStrapProperties.configuration);
}
public static Map<String, String> readServiceInstanceProperties(Configuration configuration) {
return readProperties(configuration, CONFIG_SERVICE_INSTANCE_PROPERTIES, OLD_CONFIG_SERVICE_INSTANCE_PROPERTIES);
}
public static Map<String, String> readServiceInstanceProperties() {
return readServiceInstanceProperties(BootStrapProperties.configuration);
}
public static String readServiceInstanceExtendedClass(Configuration configuration) {
return readStringValue(configuration, CONFIG_SERVICE_INSTANCE_EXTENDED_CLASS,
OLD_CONFIG_SERVICE_INSTANCE_EXTENDED_CLASS,
null);
}
public static String readServiceInstanceExtendedClass() {
return readServiceInstanceExtendedClass(BootStrapProperties.configuration);
}
public static String readServiceInstanceInitialStatus(Configuration configuration) {
return readStringValue(configuration, CONFIG_SERVICE_INSTANCE_INITIAL_STATUS,
OLD_CONFIG_SERVICE_INSTANCE_INITIAL_STATUS,
DEFAULT_MICROSERVICE_INSTANCE_INITIAL_STATUS);
}
public static String readServiceInstanceInitialStatus() {
return readServiceInstanceInitialStatus(BootStrapProperties.configuration);
}
public static String readServiceInstanceTags(Configuration configuration) {
return readStringValue(configuration, CONFIG_SERVICE_INSTANCE_TAGS,
OLD_CONFIG_SERVICE_INSTANCE_TAGS,
null);
}
public static String readServiceInstanceTags() {
return readServiceInstanceTags(BootStrapProperties.configuration);
}
private static String readStringValue(Configuration configuration, String newKey, String oldKey,
String defaultValue) {
String result = configuration.getString(newKey, null);
if (result == null) {
return configuration.getString(oldKey, defaultValue);
}
return result;
}
private static Map<String, String> readProperties(Configuration configuration, String newKey, String oldKey) {
AbstractConfiguration subset = (AbstractConfiguration) configuration.subset(newKey);
if (subset.isEmpty()) {
subset = (AbstractConfiguration) configuration.subset(oldKey);
}
return toStringMap(subset);
}
private static Map<String, String> toStringMap(AbstractConfiguration configuration) {
AbstractConfiguration root = findRoot(configuration);
Map<String, String> map = new LinkedHashMap<>();
configuration.getKeys().forEachRemaining(key -> {
Object value = configuration.getProperty(key);
// support placeholder
value = PropertyConverter.interpolate(value, root);
map.put(key, Objects.toString(value, null));
});
return map;
}
private static AbstractConfiguration findRoot(AbstractConfiguration configuration) {
if (configuration instanceof SubsetConfiguration) {
return findRoot((AbstractConfiguration) ((SubsetConfiguration) configuration).getParent());
}
return configuration;
}
private static void checkMicroserviceName(String name) {
// the configuration we used
// when resolve placeholder failed
// the result will remains ${var}
if (StringUtils.isEmpty(name) || name.contains("${")) {
throw new IllegalArgumentException(String.format(
"MicroserviceName '%s' is invalid. you must configure '%s' or set the placeholder value.",
name,
CONFIG_SERVICE_NAME));
}
}
}