代碼示例import com.spotify.docker.client.DefaultDockerClient;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.net.URI;
public class DockerClientUtil {
private static final Logger LOGGER = LoggerFactory.getLogger(DockerClientUtil.class);
private static String DEFAULT_PORT = "2375";
private static long CONNECT_TIMEOUT_MILLIS = 10000L;
public static DefaultDockerClient getDockerClient(String hostPath, String port) throws Exception{
if (StringUtils.isBlank(port)){
port = DEFAULT_PORT;
}
DefaultDockerClient dockerClient;
try {
dockerClient = DefaultDockerClient.builder()
.connectTimeoutMillis(CONNECT_TIMEOUT_MILLIS)
.uri(URI.create("http://" + hostPath + ":" + port)).build();
}catch (Exception e){
LOGGER.error("DockerClient連接超時", e.getMessage());
throw new Exception(e.getMessage());
}
return dockerClient;
}
}
注:dockerclient相關jar包請參考:https://blog.csdn.net/weixin_42518062/article/details/103668710
import com.csdn.demo.utils.DockerClientUtil;
import com.google.common.cache.*;
import com.spotify.docker.client.DefaultDockerClient;
import org.slf4j.LoggerFactory;
import org.slf4j.Logger;
import org.springframework.context.annotation.Configuration;
@Configuration
public class GuavaConfig {
private static final Logger LOGGER = LoggerFactory.getLogger(GuavaConfig.class);
public LoadingCache getDockerClient(){
LoadingCache<Object, Object> loadingCache = CacheBuilder.newBuilder()
//設置併發級別,指可以同時進行緩存的線程數
.concurrencyLevel(5)
//設置緩存最大容量,超過之後就會按照LUR算反來移除緩存項
.maximumSize(5)
//設置緩存容器的初始化容量
.initialCapacity(2)
//設置緩存的移除通知
.removalListener(new RemovalListener<Object, Object>() {
@Override
public void onRemoval(RemovalNotification<Object, Object> removalNotification) {
LOGGER.info("緩存移除通知:" + removalNotification.getKey() + "被移除, 移除原因:" + removalNotification.getCause());
}
})
//在緩存不存在時通過cacheLoader實現自動加載緩存
.build(new CacheLoader<Object, Object>() {
@Override
public DefaultDockerClient load(Object key) throws Exception {
String[] split = ((String) key).split(":");
DefaultDockerClient dockerClient = DockerClientUtil.getDockerClient(split[0], split[1]);
return dockerClient;
}
});
if (LOGGER.isInfoEnabled()){
LOGGER.info("-----------------guava本地緩存初始化成功------------------");
}
return loadingCache;
}
}
注:項目關閉重啓後緩存清空