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

回到顶部