Commit 998bcf75 by Jason Song

optimize ConfigService.getConfig performance

parent 7e2e1d0b
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
<parent> <parent>
<groupId>com.ctrip.framework.apollo</groupId> <groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo</artifactId> <artifactId>apollo</artifactId>
<version>0.4.0</version> <version>0.4.1</version>
<relativePath>../pom.xml</relativePath> <relativePath>../pom.xml</relativePath>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
<parent> <parent>
<groupId>com.ctrip.framework.apollo</groupId> <groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo</artifactId> <artifactId>apollo</artifactId>
<version>0.4.0</version> <version>0.4.1</version>
<relativePath>../pom.xml</relativePath> <relativePath>../pom.xml</relativePath>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
<parent> <parent>
<artifactId>apollo</artifactId> <artifactId>apollo</artifactId>
<groupId>com.ctrip.framework.apollo</groupId> <groupId>com.ctrip.framework.apollo</groupId>
<version>0.4.0</version> <version>0.4.1</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>apollo-biz</artifactId> <artifactId>apollo-biz</artifactId>
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
<parent> <parent>
<groupId>com.ctrip.framework.apollo</groupId> <groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo</artifactId> <artifactId>apollo</artifactId>
<version>0.4.0</version> <version>0.4.1</version>
<relativePath>../pom.xml</relativePath> <relativePath>../pom.xml</relativePath>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
......
...@@ -88,7 +88,7 @@ If you need this functionality, you could specify the cluster as follows: ...@@ -88,7 +88,7 @@ If you need this functionality, you could specify the cluster as follows:
<dependency> <dependency>
<groupId>com.ctrip.framework.apollo</groupId> <groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-client</artifactId> <artifactId>apollo-client</artifactId>
<version>0.4.0</version> <version>0.4.1</version>
</dependency> </dependency>
## III. Client Usage ## III. Client Usage
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
<parent> <parent>
<groupId>com.ctrip.framework.apollo</groupId> <groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo</artifactId> <artifactId>apollo</artifactId>
<version>0.4.0</version> <version>0.4.1</version>
<relativePath>../pom.xml</relativePath> <relativePath>../pom.xml</relativePath>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
......
...@@ -14,19 +14,59 @@ import org.unidal.lookup.ContainerLoader; ...@@ -14,19 +14,59 @@ import org.unidal.lookup.ContainerLoader;
/** /**
* Entry point for client config use * Entry point for client config use
*
* @author Jason Song(song_s@ctrip.com) * @author Jason Song(song_s@ctrip.com)
*/ */
public class ConfigService { public class ConfigService {
private static final ConfigService s_instance = new ConfigService(); private static final ConfigService s_instance = new ConfigService();
private PlexusContainer m_container; private PlexusContainer m_container;
private ConfigManager m_configManager;
private ConfigRegistry m_configRegistry;
private ConfigService() { private ConfigService() {
m_container = ContainerLoader.getDefaultContainer(); m_container = ContainerLoader.getDefaultContainer();
} }
private ConfigManager getManager() {
if (m_configManager == null) {
synchronized (this) {
if (m_configManager == null) {
try {
m_configManager = m_container.lookup(ConfigManager.class);
} catch (ComponentLookupException ex) {
ApolloConfigException exception = new ApolloConfigException("Unable to load ConfigManager!", ex);
Tracer.logError(exception);
throw exception;
}
}
}
}
return m_configManager;
}
private ConfigRegistry getRegistry() {
if (m_configRegistry == null) {
synchronized (this) {
if (m_configRegistry == null) {
try {
m_configRegistry = m_container.lookup(ConfigRegistry.class);
} catch (ComponentLookupException ex) {
ApolloConfigException exception = new ApolloConfigException("Unable to load ConfigRegistry!", ex);
Tracer.logError(exception);
throw exception;
}
}
}
}
return m_configRegistry;
}
/** /**
* Get Application's config instance. * Get Application's config instance.
*
* @return config instance * @return config instance
*/ */
public static Config getAppConfig() { public static Config getAppConfig() {
...@@ -35,35 +75,16 @@ public class ConfigService { ...@@ -35,35 +75,16 @@ public class ConfigService {
/** /**
* Get the config instance for the namespace. * Get the config instance for the namespace.
*
* @param namespace the namespace of the config * @param namespace the namespace of the config
* @return config instance * @return config instance
*/ */
public static Config getConfig(String namespace) { public static Config getConfig(String namespace) {
return getManager().getConfig(namespace); return s_instance.getManager().getConfig(namespace);
} }
public static ConfigFile getConfigFile(String namespace, ConfigFileFormat configFileFormat) { public static ConfigFile getConfigFile(String namespace, ConfigFileFormat configFileFormat) {
return getManager().getConfigFile(namespace, configFileFormat); return s_instance.getManager().getConfigFile(namespace, configFileFormat);
}
private static ConfigManager getManager() {
try {
return s_instance.m_container.lookup(ConfigManager.class);
} catch (ComponentLookupException ex) {
ApolloConfigException exception = new ApolloConfigException("Unable to load ConfigManager!", ex);
Tracer.logError(exception);
throw exception;
}
}
private static ConfigRegistry getRegistry() {
try {
return s_instance.m_container.lookup(ConfigRegistry.class);
} catch (ComponentLookupException ex) {
ApolloConfigException exception = new ApolloConfigException("Unable to load ConfigRegistry!", ex);
Tracer.logError(exception);
throw exception;
}
} }
static void setConfig(Config config) { static void setConfig(Config config) {
...@@ -72,11 +93,12 @@ public class ConfigService { ...@@ -72,11 +93,12 @@ public class ConfigService {
/** /**
* Manually set the config for the namespace specified, use with caution. * Manually set the config for the namespace specified, use with caution.
*
* @param namespace the namespace * @param namespace the namespace
* @param config the config instance * @param config the config instance
*/ */
static void setConfig(String namespace, final Config config) { static void setConfig(String namespace, final Config config) {
getRegistry().register(namespace, new ConfigFactory() { s_instance.getRegistry().register(namespace, new ConfigFactory() {
@Override @Override
public Config create(String namespace) { public Config create(String namespace) {
return config; return config;
...@@ -96,15 +118,18 @@ public class ConfigService { ...@@ -96,15 +118,18 @@ public class ConfigService {
/** /**
* Manually set the config factory for the namespace specified, use with caution. * Manually set the config factory for the namespace specified, use with caution.
*
* @param namespace the namespace * @param namespace the namespace
* @param factory the factory instance * @param factory the factory instance
*/ */
static void setConfigFactory(String namespace, ConfigFactory factory) { static void setConfigFactory(String namespace, ConfigFactory factory) {
getRegistry().register(namespace, factory); s_instance.getRegistry().register(namespace, factory);
} }
// for test only // for test only
static void setContainer(PlexusContainer m_container) { static void setContainer(PlexusContainer m_container) {
s_instance.m_container = m_container; s_instance.m_container = m_container;
s_instance.m_configManager = null;
s_instance.m_configRegistry = null;
} }
} }
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
<parent> <parent>
<groupId>com.ctrip.framework.apollo</groupId> <groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo</artifactId> <artifactId>apollo</artifactId>
<version>0.4.0</version> <version>0.4.1</version>
<relativePath>../pom.xml</relativePath> <relativePath>../pom.xml</relativePath>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
<parent> <parent>
<groupId>com.ctrip.framework.apollo</groupId> <groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo</artifactId> <artifactId>apollo</artifactId>
<version>0.4.0</version> <version>0.4.1</version>
<relativePath>../pom.xml</relativePath> <relativePath>../pom.xml</relativePath>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
<parent> <parent>
<groupId>com.ctrip.framework.apollo</groupId> <groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo</artifactId> <artifactId>apollo</artifactId>
<version>0.4.0</version> <version>0.4.1</version>
<relativePath>../pom.xml</relativePath> <relativePath>../pom.xml</relativePath>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
<parent> <parent>
<artifactId>apollo</artifactId> <artifactId>apollo</artifactId>
<groupId>com.ctrip.framework.apollo</groupId> <groupId>com.ctrip.framework.apollo</groupId>
<version>0.4.0</version> <version>0.4.1</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>apollo-demo</artifactId> <artifactId>apollo-demo</artifactId>
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
<parent> <parent>
<groupId>com.ctrip.framework.apollo</groupId> <groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo</artifactId> <artifactId>apollo</artifactId>
<version>0.4.0</version> <version>0.4.1</version>
<relativePath>../pom.xml</relativePath> <relativePath>../pom.xml</relativePath>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
......
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
<groupId>com.ctrip.framework.apollo</groupId> <groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo</artifactId> <artifactId>apollo</artifactId>
<version>0.4.0</version> <version>0.4.1</version>
<name>Apollo</name> <name>Apollo</name>
<packaging>pom</packaging> <packaging>pom</packaging>
<description>Ctrip Configuration Center</description> <description>Ctrip Configuration Center</description>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment