Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用弹簧&x27;使用发现服务和外部URL创建RestTemplate_Java_Spring_Resttemplate - Fatal编程技术网

Java 使用弹簧&x27;使用发现服务和外部URL创建RestTemplate

Java 使用弹簧&x27;使用发现服务和外部URL创建RestTemplate,java,spring,resttemplate,Java,Spring,Resttemplate,我在做一个SpringRest微服务。代码使用RestTemplate访问其他服务。它的配置如下: @Bean @LoadBalanced public RestTemplate restTemplate() { return new RestTemplate(); } 使用此配置,注入的restTemplate实例将解析域中指定的服务名称,并调用相应的服务。例如,以下调用将起作用:restemplate.getForEntity(“http://service-name/...",

我在做一个SpringRest微服务。代码使用RestTemplate访问其他服务。它的配置如下:

@Bean
@LoadBalanced
public RestTemplate restTemplate() {
    return new RestTemplate();
}
使用此配置,注入的restTemplate实例将解析域中指定的服务名称,并调用相应的服务。例如,以下调用将起作用:
restemplate.getForEntity(“http://service-name/...", ...);

问题是,我们还希望使用外部服务并使用RestTemplate查询它们

例如
http://api.somedomain.com/...
无法工作,应用程序会抱怨发现服务不知道该服务
api.somedomain.com

更有趣的是,在某些情况下,URL是未知的,因此在开发过程中不知道URL是否包含服务名称或旧域名,因此下面的代码类似于
restemplate.getForEntity(config.getURL(),…)都应该工作。(可能来自配置、数据库或其他)

问题是:是否可以将RestTemplate配置为这样做?有什么办法可以解决这个问题

我唯一能想到的就是使用一个工厂,它返回一个知道URL的适当实例。检查将是简单而愚蠢的:如果域包含一个点,它肯定不是一个服务名。但这是我目前正在努力避免的事情


你们有什么建议吗?

你们可以在不使用@LoadBalanced的情况下创建另一个RestTemplate Bean,比如

@Bean
public RestTemplate externalRestTemplate(){
    return new RestTemplate();
}
在那之后,注入像豆子一样的东西

@Autowired
private RestTemplate externalRestTemplate;