作者

本文作者:slankka

# 如何去掉cat-client.xml配置

# 自定义ClientConfigProvider

步骤

新建 src/main/resources/META-INF/services/com.dianping.cat.configuration.ClientConfigProvider SPI文件

填写ClientConfigProvider完全限定类名称:

com.slankka.tutorial.advanced.CatClientSupport
1

好处

  • 便于容器化,避免附带过多文件
  • 避免出现本地开发环境,或者某些运行环境,忘记配置 /data/appdata/cat/cat-client.xml 这个文件时,出现Java类加载错误
import com.ctrip.framework.apollo.ConfigService;
import com.dianping.cat.configuration.ClientConfigProvider;
import com.dianping.cat.configuration.client.entity.ClientConfig;
import com.dianping.cat.configuration.client.entity.Server;

/**
 * 客户端不再需要cat-client.xml外部文件
 */
public class CatClientSupport implements ClientConfigProvider {

    private static ClientConfig clientConfig;

    @Override
    public synchronized ClientConfig getClientConfig() {
        if (clientConfig == null) {
            clientConfig = new ClientConfig();
            clientConfig.setEnabled(true);
            clientConfig.setMode("client");
            Server server = new Server(ConfigService.getAppConfig().getProperty("cat.host", "127.0.0.1"));
            server.setPort(ConfigService.getAppConfig().getIntProperty("cat.port", 2280));
            server.setHttpPort(ConfigService.getAppConfig().getIntProperty("cat.httpPort", 8080));
            clientConfig.addServer(server);
        }
        return clientConfig;
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

注:

  • 上述代码,手动指定CAT的三条配置,这里是从Ctrip Apollo中动态获取。
  • 因为这部分代码在启动周期里比较早,因此使用了Apollo的原生API。