繁体   English   中英

避免一遍又一遍地调用同一函数

[英]Avoid calling the same function over and over again

我有一个功能可以建立与码头工人的连接。 您实际上并不需要了解太多,但我要做的就是确保IP和端口始终与我的应用程序中的相同(Settings.getSettings())

 public static DockerClient dockerClient() {

    try {

        Settings settings = Settings.getSettings();
        DockerClientConfig config = DefaultDockerClientConfig.createDefaultConfigBuilder()
                .withDockerHost("tcp://" + settings.getDockerIP() + ":" + settings.getDockerPort())
                .withDockerConfig("/home/user/.docker/config.json")
                .build();

        DockerCmdExecFactory dockerCmdExecFactory = new JerseyDockerCmdExecFactory()
                .withMaxTotalConnections(200)
                .withMaxPerRouteConnections(200);

        DockerClient dockerClient = DockerClientBuilder.getInstance(config)
                .withDockerCmdExecFactory(dockerCmdExecFactory)
                .build();

        return dockerClient;

    } catch (Exception e) {
        System.out.println("Error: " + e);
    }
    return null;
}

每当我想做某事时,我都会调用此函数。 例:

public static void startContainer(String containerName) {
    DockerClient dockerClient = dockerClient();
 ....
  public static List<Image> getImages() {
    List<Image> images = new ArrayList<>(dockerClient().listImagesCmd().withShowAll(true).exec());
 ....

有没有更有效的方法来解决这个问题? 我只想确保当我执行某些命令时,建立与正确的ip和端口的连接。

您可能每次都不需要构建configdockerCmdExecFactory 作为解决方案,您可以同时创建两个字段而不是局部变量。 但请注意:您必须考虑多线程,可能有多少个实例,并确保始终在调用dockerClient()之前初始化字段。 在您的情况下,这可能不是问题,但您必须进行检查。

如果您使用Spring或类似的东西,您可能想要创建一个封装所有这些东西的bean。

也可能是您应用程序中的某些框架已经实现了连接逻辑。 这将是更可取的,因为在框架内有许多您无法意识到的优化内容。 以连接/套接字池和异常处理为例。 尝试使用Google“ docker client your-framework-name

根据我的评论,您可以创建一个包含docker客户端状态的服务,并检查其是否更改以重新加载:

class DockerClientService {
    private DockerClient dockerClient;
    private String ip;
    private int port;

    DockerClient getClient() {
        Settings settings = Settings.getSettings();
        if (settings.getDockerPort() != port || !settings.getDockerIP().equals(ip)) {
            port = settings.getDockerPort();
            ip = settings.getDockerIP();
            DockerClientConfig config = DefaultDockerClientConfig.createDefaultConfigBuilder()
                .withDockerHost("tcp://" + ip + ":" + port)
                .withDockerConfig("/home/user/.docker/config.json")
                .build();

            DockerCmdExecFactory dockerCmdExecFactory = new JerseyDockerCmdExecFactory()
                .withMaxTotalConnections(200)
                .withMaxPerRouteConnections(200);

            dockerClient = DockerClientBuilder.getInstance(config)
                .withDockerCmdExecFactory(dockerCmdExecFactory)
                .build();
        }
        return dockerClient;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM