RestTemplate的三种使用方式
第一种直接新建对象调用
@Service
public class RoadWorkService {
@Autowired
private RoadWorkDao resourcesdao;
public Map<String, Object> findroadwork() {
// TODO Auto-generated method stub
List<Map<String, Object>> list = null ;
Map<String,Object> map = new HashMap<>();
list = resourcesdao.findroadwork();
//第一种方式,新建resttemplate对象
RestTemplate resttemplate = new RestTemplate();
String posttest = resttemplate.getForObject("http://localhost:30522/eurekaApi/test", String.class);
System.err.println(posttest);
map.put("postman", posttest);
map.put("data", list);
return map;
}
}
并无聊的测试了一下这样没有在Eureka Server服务中心注册也可以互相调用(这样当然可以调用了,因为你写死了地址。。)
这种方法的缺点就是url必须写死。。。。,而且假如对应服务服务有启用了负载均衡,有两个服务,那么他更不能确定地址了。
第二种方法是在第一种的方法上增强
@Service
public class RoadWorkService {
@Autowired
private RoadWorkDao resourcesdao;
@Autowired
private LoadBalancerClient loadbalancerclient;
public Map<String, Object> findroadwork() {
// TODO Auto-generated method stub
List<Map<String, Object>> list = null ;
Map<String,Object> map = new HashMap<>();
list = resourcesdao.findroadwork();
//这个填入的id就是配置的id
ServiceInstance choose = loadbalancerclient.choose("EUREKACLIENT-POSTMAN");
//新学拼接字符串方法。。。。
String url = String.format("http://%s:%s", choose.getHost(),choose.getPort())+"/eurekaApi/test";
System.out.println(url);
//这里开始走第一种方法
RestTemplate restTemplate = new RestTemplate();
String postman = restTemplate.getForObject(url,String.class);
map.put("postman", postman);
map.put("data", list);
return map;
}
}
loadbalancerclient.choose("EUREKACLIENT-POSTMAN");传入的id就是如下id
此处测试只开两个客户端服务,会显示找不到,看来这里的id是用到了EurekaServer注册中心
第三种方式,配置和注解来实现
package com.sola.config;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;
@Component
public class RoadWorkConfig {
//差别在于在这加一个注解
@Bean
@LoadBalanced
public RestTemplate resttemplate(){
return new RestTemplate();
}
}
然后过来这么调用
package com.sola.service;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import com.sola.dao.RoadWorkDao;
@Service
public class RoadWorkService {
@Autowired
private RoadWorkDao resourcesdao;
@Autowired
private RestTemplate resttemplate;
public Map<String, Object> findroadwork() {
// TODO Auto-generated method stub
List<Map<String, Object>> list = null ;
Map<String,Object> map = new HashMap<>();
list = resourcesdao.findroadwork();
String forObject = resttemplate.getForObject("http://EUREKACLIENT-POSTMAN/eurekaApi/test", String.class);
map.put("postman", forObject);
map.put("data", list);
return map;
}
}