我不明白这一点...我正在尝试捕获一个java.net.ConnectException以防我的下游 API 离线。然而 Eclipse 警告我它无法访问 - 提示代码不能抛出ConnectException. 然而,它显然可以。
@RequestMapping("/product/{id}")
public JsonNode getProduct(@PathVariable("id") int productID, HttpServletResponse oHTTPResponse)
{
RestTemplate oRESTTemplate = new RestTemplate();
ObjectMapper oObjMapper = new ObjectMapper();
JsonNode oResponseRoot = oObjMapper.createObjectNode();
try
{
ResponseEntity<String> oHTTPResponseEntity = oRESTTemplate.getForEntity("http://localhost:9000/product/"+productID, String.class);
}
catch (ConnectException e)
{
System.out.println("ConnectException caught. Downstream dependency is offline");
}
catch (Exception e)
{
System.out.println("Other Exception caught: " + e.getMessage());
}
}
Run Code Online (Sandbox Code Playgroud)
捕获的异常是:
Other Exception caught: I/O error on GET request for "http://localhost:9000/product/9": Connection refused: connect; …Run Code Online (Sandbox Code Playgroud) 我需要动态发现实例的 ip4v 地址(在 userdata 脚本执行期间并使用它来替换一些 XML。我已经尝试了以下方法,但它不起作用。大概是因为我们实例时网络不可用运行用户数据脚本?
此外,为了增加复杂性,假设此实例没有外部互联网访问权限(因此建议的其他解决方案curl http://checkip.amazonaws.com/将不起作用)。
sudo sed -i -e "s,<listenaddress address=\",<listenaddress address=\"$(wget -qO- http://instance-data/latest/meta-data/public-ipv4),g" /tmp/my.config.xml
我使用的是默认 Amazon AMI(Amazon Linux AMI 2017.03.1 (HVM),SSD 卷类型 - ami-ed100689)
有任何想法吗?
编辑:完整的用户数据脚本
#!/bin/bash
# This script starts a extra small service with 512MB heap.
# USE ONLY FOR DEMOS
sudo useradd myuser
sudo groupadd myuser
sudo usermod -a -G myuser myuser
sudo yum update -y
sudo yum install java-1.8.0-openjdk wget -y
sudo wget https://files.mysite.com/downloads/service/whatever.jar -P /opt
sudo /usr/bin/java8 -jar /opt/whatever.jar …Run Code Online (Sandbox Code Playgroud)