Spring Cloud开发注意事项
来源:互联网 发布:手机淘宝比价软件 编辑:程序博客网 时间:2024/06/05 20:32
1、消费者和服务提供者(接口和实现)
service 接口上添加注解@FeignClient( name = "${feign.provider.portal}" ) feign.provider.portal 需要在application.yml中配置 portal provider 的application.name
service实现类上需添加注解 @RestController , *Mapper.java 接口上需要添加 @Mapper
2、接口中的方法定义 需添加注解
- @RequestMapping(value = "/${path}",method = RequestMethod.POST) ,
${path}为请求路径,可以以方法名定义,method 如不确定请使用 POST,如果对象参数必须使用 POST,并且 参数前必须使用 @RequestBody 注解
如果参数为基本数据类型或者String,可以使用GET方式,参数前需加@RequestParam注解,注解的value不能为空@RequestMapping(value = "/save" , method = RequestMethod.POST)
public int save(@RequestBody User user);@RequestMapping(value = "/auditStaff",method = RequestMethod.POST)
public void auditStaff(@RequestParam("staffId") String staffId, @RequestParam("deptId") String deptId); 接口中使用的@RequestParam("value") ,在接口实现类中的参数名必须和注解中的value一致:
例如 接口方法 User find(@RequestParam("userId") String id) ,
实现类方法 User find(String userId) ,如果不一致参数将为null。实际就是springMvc中的参数将RestApi中的请求参数绑定到方法的参数上
- 如果接口中定义的参数有对象类型,需要在参数前添加 @RequestBody 注解,一个接口参数中仅能有一个@RequestBody 注解, 并且需要在 实现方法中 参数也添加 @RequestBody注解
- 如果接口中参数未添加@RequestParam(@RequestHeader、@RequestBody),那么FeignClient默认使用POST发送请求,如果接口定义中定义的是method = RequestMethod.GET ,那么将报错,方法不匹配
3、跨feign client调用
如果provider中需要引入其他feign client的接口,需在 provider的启动类添加注解 @EnableFeignClients(basePackages = {"com.complay.biz.service"}) ,basePackages 为其他模块接口的包名
例如: 在portal provider中需要应用 mdata-service 中的接口,需要扫描 接口中的FeignClient 注解 使 mdata-service接口注入到接口,同时需要在application.yml 中配置依赖接口的feignClient 的name
4、Spring Cloud中,Feign和Ribbon在整合了Hystrix后,可能会出现首次调用失败的问题
- 方法一
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds: 5000
该配置是让Hystrix的超时时间改为5秒 - 方法二
hystrix.command.default.execution.timeout.enabled: false
该配置,用于禁用Hystrix的超时时间 - 方法三
feign.hystrix.enabled: false
该配置,用于索性禁用feign的hystrix。该做法除非一些特殊场景,不推荐使用。
5、http请求直接跳视图view:
@Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter{
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/reserve/rsvquery/all").setViewName("/reserve/rsvquery/all");
registry.addViewController("/reserve/member/index").setViewName("/reserve/member/index");
}
}
6、debug关闭重试和超时:
feign.hystrix.enabled: false
7、config多级目录配置:
服务端svn 路径上配置一级目录:
spring.cloud.config.server.svn.uri=svn://ip:port/repos/app-config/${server.code}
客户端将二级目录作为label配置
spring.cloud.config.label=portal
8、FeignClient Date类型参数有时差:
原因是Feign 客户端的将Date对象转为String,然后服务端接收的String转换为Date对象时采用的默认构造器的方式,new Date('Sat Sep 02 .....')
解决方法:1、当发送时间类型时,直接用String发送
2、Feign客户端实现FeignFormatterRegistrar接口自定义DateFormatRegister
@Component
public class DateFormatRegister implements FeignFormatterRegistrar{
public DateFormatRegister(){
}
@Override
public void registerFormatters(FormatterRegistry registry) {
registry.addConverter(Date.class, String.class, new Date2StringConverter());
}
private class Date2StringConverter implements Converter<Date,String>{
@Override
public String convert(Date source) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return sdf.format(source);
}
}
}
provider增加相应的解析器
@Configuration
public class WebConfigBeans {
@Autowired
private RequestMappingHandlerAdapter handlerAdapter;
/**
* 增加字符串转日期的功能
*/
@PostConstruct
public void initEditableValidation() {
ConfigurableWebBindingInitializer initializer = (ConfigurableWebBindingInitializer) handlerAdapter
.getWebBindingInitializer();
if (initializer.getConversionService() != null) {
GenericConversionService genericConversionService = (GenericConversionService) initializer
.getConversionService();
genericConversionService.addConverter(String.class, Date.class, new String2DateConverter());
}
}
}
9、Feign Rest请求参数过长 (角色选权限的时候,ID太多太长):
配置文件添加配置:server.maxHttpHeaderSize: 1024000 #单位byte,最大请求头数据大小,默认是8k
Properties类为ServerProperties,tomcat相关参数都在里面
- Spring Cloud开发注意事项
- Spring Cloud Eureka集群部署注意事项
- Spring Cloud Feign 的使用注意事项
- spring cloud开发、部署注意
- spring cloud开发实战讲解
- spring boot开发注意事项
- spring-cloud-feign集成feign的几个注意事项
- Spring Cloud
- Spring Cloud
- Spring Cloud
- Spring Cloud
- Spring cloud
- spring Cloud
- Spring cloud
- spring cloud
- spring cloud
- spring cloud
- Spring Cloud
- Course1_神经网络与深度学习_deeplearning.ai_andrew_ng
- 遗传算法之二进制编码
- 华为机试-字符串的分割
- activeMQ发布订阅者模式使用
- 传感器
- Spring Cloud开发注意事项
- 神经网络与深度学习(8)
- [NOIP2017模拟]构造
- 5. Longest Palindromic Substring(求最长回文子字符串)
- 封装Hibernate的Session操作和增删查改的工具类
- tomcat启动和停止时java.net.ConnectException:Connection refused:connect
- 如何在64位的Win10系统下安装.NET Framework 3.0
- 滴滴一面面经
- jQuery的属性与样式