RestTemplate应该是静态全局声明的吗?
我在代码中使用Java Callable Future。以下是我使用future和callables的主要代码-
public class TimeoutThread { public static void main(String[] args) throws Exception {
ExecutorService executor = Executors.newFixedThreadPool(5);
Future<String> future = executor.submit(new Task());
try {
System.out.println("Started..");
System.out.println(future.get(3, TimeUnit.SECONDS));
System.out.println("Finished!");
} catch (TimeoutException e) {
System.out.println("Terminated!");
}
executor.shutdownNow();
}
}
下面是我的Task类,该类实现Callable接口,我需要根据所拥有的主机名生成URL,然后使用调用SERVERS RestTemplate。如果第一个主机名中有任何异常,那么我将为另一个主机名生成URL,然后尝试拨打电话。
class Task implements Callable<String> { private static RestTemplate restTemplate = new RestTemplate();
@Override
public String call() throws Exception {
//.. some code
for(String hostname : hostnames) {
if(hostname == null) {
continue;
}
try {
String url = generateURL(hostname);
response = restTemplate.getForObject(url, String.class);
// make a response and then break
break;
} catch (Exception ex) {
ex.printStackTrace(); // use logger
}
}
}
}
所以我的问题应该声明RestTemplate为静态全局变量吗?还是在这种情况下不应该是静态的?
回答:
无论是哪种方式,static
还是实例都没有关系。
RestTemplate
的发出HTTP请求的方法是线程安全的,因此与RestTemplate
每个Task
实例是否拥有一个实例还是所有Task实例都具有共享实例无关(垃圾回收除外)。
就个人而言,我将创建RestTemplate
外部Task
类并将其作为参数传递给Task
构造函数。(尽可能使用控制反转。)
以上是 RestTemplate应该是静态全局声明的吗? 的全部内容, 来源链接: utcz.com/qa/430290.html