[英]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和端口的连接。
您可能每次都不需要构建config
和dockerCmdExecFactory
。 作为解决方案,您可以同时创建两个字段而不是局部变量。 但请注意:您必须考虑多线程,可能有多少个实例,并确保始终在调用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.