Я пытаюсь свернуться, используя построитель процессов в моем приложении Spring-boot, похоже, не работает, я пытаюсь заменить определенное значение в curl (определенное в app.properties) значением и запустить curl дляполучить ответ JSON
Это будет читать json-файл контейнера и выберет общедоступный порт, где * частный порт 8080. Если не получен ответ от службы контейнеров или * частный порт 8080 не найден, или общедоступный порт равен нулю, соответствующий *частный порт 8080, а затем 8080 как порт контейнера будет перезаписан
Это приложение для весенней загрузки Java, не уверенное, почему этот код не работает
@Autowired
ObjectMapper objectMapper;
@Value("${container.curlUrl}")
private String curlUrl;
@Value("${ipAddress.curlUrl}")
private String ipAddressUrl;
private Long defaultContainerPortNumber = 8080L;
public Long getContainerPort() {
logger.info("Calling Container Api");
Long containerPortNumber = defaultContainerPortNumber;
String hostName = Constants.EMPTY_STR;
try {
hostName = InetAddress.getLocalHost().getHostName();
logger.info(hostName);
} catch (UnknownHostException e1) {
logger.debug("Unable to find host name");
return containerPortNumber;
}
ProcessBuilder process = new ProcessBuilder(curlUrl.replace("{hostname}", hostName).split(" "));
logger.info(curlUrl);
Process p;
StringBuilder containerResponse = new StringBuilder();
logger.info(containerResponse);
try {
p = process.start();
logger.info(containerResponse);
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = null;
while ((line = reader.readLine()) != null) {
containerResponse.append(line);
}
} catch (IOException e) {
logger.debug("Error in executing curl request");
logger.debug(e);
return containerPortNumber;
}
if (containerResponse.length() == Constants.ZERO) {
logger.debug("No Response returned from CURL request");
return containerPortNumber;
}
logger.info("Curl API response is: {}", containerResponse);
ContainerPort containerPort = null;
try {
containerPort = objectMapper.readValue(containerResponse.toString(), ContainerPort.class);
} catch (IOException e) {
logger.debug("Error in parsing curl request response");
logger.debug(e);
return containerPortNumber;
}
if (null == containerPort || null == containerPort.getNetworkSettings()
|| CollectionUtils.isEmpty(containerPort.getNetworkSettings().getPorts())) {
logger.debug("Container Api response is empty. So returning default port");
return containerPortNumber;
}
logger.debug("Container Api response: {}", containerPort);
for (String portBindingKey : containerPort.getNetworkSettings().getPorts().keySet()) {
if (portBindingKey.equals("8080/tcp")) {
List<Port> ports = containerPort.getNetworkSettings().getPorts().get(portBindingKey);
if (CollectionUtils.isEmpty(ports)) {
logger.debug("Port response is empty for port 8080");
return containerPortNumber;
}
for (Port port : ports) {
if (null != port.getHostPort()) {
containerPortNumber = port.getHostPort();
break;
}
}
}
}
logger.debug("Container port is: {}", containerPortNumber);
return containerPortNumber;
}```
The result should be a port number corresponding to 8080/tcp ,
but the curl request itself doesnt run