- Java: 1.7+
Apollo client requires AppId
and Environment
information available to function properly, so please read the following and configure them properly:
AppId is the identity for the application, which is a key information to retrieve the config from server.
AppId information should be put in classpath:/META-INF/app.properties
with its key as app.id
.
For example, you could place the file as the following screenshot:
And config the file as:
app.id=YOUR-APP-ID
Apollo supports config by multiple environments, so environment is another key information to retrieve the config from server.
Environment could be configured in 3 ways:
-
As Java System Property
- You could specify environment as java system property
env
- For example, when starting the java application, it can be configured via
-Denv=YOUR-ENVIRONMENT
- Please note the key should be lower case
- You could specify environment as java system property
-
As OS System Environment
- You could also specify environment as system environment
ENV
- Please note the key should be UPPER CASE
- You could also specify environment as system environment
-
As Property File
- You could create a file
/opt/settings/server.properties
on the target machine - And specify the environment in the file as
env=YOUR-ENVIRONMENT
- Please note the key should be lower case
- You could create a file
Currently, env
allows the following values (case-insensitive):
- DEV
- FWS
- FAT
- UAT
- PRO
Apollo supports config separated by clusters, which means for one appId and one environment, you could have different configs.
If you need this functionality, you could specify the cluster as follows:
- As Java System Property
- You could specify cluster as java system property
apollo.cluster
- For example, when starting the java application, it can be configured via
-Dapollo.cluster=xxx
- Please note the key should be lower case
- You could specify cluster as java system property
- As Property file
- You could create a file
/opt/settings/server.properties
on the target machine - And specify the idc cluster in the file as
idc=xxx
- Please note the key should be lower case
- You could create a file
-
If both
apollo.cluster
andidc
are specified:- We will first try to load config from cluster specified as
apollo.cluster
- If not found, we will fall back to cluster specified as
idc
- If still not found, we will fall back to the default cluster
default
- We will first try to load config from cluster specified as
-
If only
apollo.cluster
is specified:- We will first try to load config from cluster specified as
apollo.cluster
- If not found, we will fall back to the default cluster
default
- We will first try to load config from cluster specified as
-
If only
idc
is specified:- We will first try to load config from cluster specified as
idc
- If not found, we will fall back to the default cluster
default
- We will first try to load config from cluster specified as
-
If neither
apollo.cluster
noridc
is specified:- We will load config from the default cluster
default
- We will load config from the default cluster
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-client</artifactId>
<version>0.8.0</version>
</dependency>
Config config = ConfigService.getAppConfig();
String someKey = "someKeyFromDefaultNamespace";
String someDefaultValue = "someDefaultValueForTheKey";
System.out.println(String.format("Value for key %s is %s", someKey, config.getProperty(someKey, someDefaultValue)));
Config config = ConfigService.getAppConfig();
config.addChangeListener(new ConfigChangeListener() {
@Override
public void onChange(ConfigChangeEvent changeEvent) {
System.out.println("Changes for namespace " + changeEvent.getNamespace());
for (String key : changeEvent.changedKeys()) {
ConfigChange change = changeEvent.getChange(key);
System.out.println(String.format("Found change - key: %s, oldValue: %s, newValue: %s, changeType: %s", change.getPropertyName(), change.getOldValue(), change.getNewValue(), change.getChangeType()));
}
}
});
String somePublicNamespace = "CAT";
Config config = ConfigService.getConfig(somePublicNamespace);
String someKey = "someKeyFromPublicNamespace";
String someDefaultValue = "someDefaultValueForTheKey";
System.out.println(String.format("Value for key %s is %s", someKey, config.getProperty(someKey, someDefaultValue)));