feign加logs日志

新建feignconfig文件,这样的配置就可以输出全部的feign的log信息

import feign.Logger;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class FeignConfig {

    @Bean
    public Logger.Level feignLoggerLevel() {
        return feign.Logger.Level.FULL;
    }
}

配置文件引用FeignClient注解的文件,这样就可以将feign的log写入文件中

logging:
  level:
      com:
        fdx: 
          api:
            UserService: debug

Springboot启动后自动执行的方法

继承CommandLineRunner接口,实现run方法。

@SpringBootApplication
public class Application implements CommandLineRunner {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);

    }

    @Override
    public void run(String... args) throws Exception {
        //程序启动后执行的操作
    }
}

feign连接超时问题

springboot默认会设置熔断器,默认超时时间和ribbon一样,造成有时候会直接切断请求。
修改方法就是主动设置超时时间。

hystrix:
  command:
    default:
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 6000
ribbon:
  ReadTimeout: 60000
  ConnectTimeout: 60000

接收500以上的statuscode

retrofit

错误内容在errorBody里,用string()取出json字符串,解析json,得到status字段的值。

fun <T> Response<T>.status(): Int {
    return if (this.code() < 500 || this.errorBody() == null) {
        this.code()
    } else {
        val error = this.errorBody()!!.string()
        val jsonObject = JSONObject(error)
        jsonObject.getInt("status")
    }
}

jquery

error方法返回的xhr.responseJSON是错误的返回实体,xhr.responseJSON.status就是自定义的状态码

$.post(url, data, function (result) {}).error(function (xhr) {
        xhr.responseJSON.status
        xhr.responseJSON.message
        });

注册与发现

eruka要求注册的服务必须和它在一个网段内,docker里用最好用host网络。docker run的时候指定 –net host

docker run --net host

gson代替jackson的converter地位

初衷

为什么会要用gson替代jackson原因如下:
– jackson的序列化依赖的是getter
– 首字母大写的属性在用getter序列化时会自动转换成小写,就和属性名本身不一致
– gson序列化直接依赖属性本身,名称不会变,即使加getter也不会按照getter方式序列化

步骤

  1. 增加gson依赖
            <dependency>
                <groupId>com.google.code.gson</groupId>
                <artifactId>gson</artifactId>
                <version>2.8.2</version>
            </dependency>
  1. 增加配置文件

package com.example.demo; import org.springframework.boot.autoconfigure.web.HttpMessageConverters; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.json.GsonHttpMessageConverter; import java.util.ArrayList; import java.util.Collection; @Configuration public class GsonConfiguration { @Bean public HttpMessageConverters customConverters() { Collection<HttpMessageConverter<?>> messageConverters = new ArrayList<>(); GsonHttpMessageConverter gsonHttpMessageConverter = new GsonHttpMessageConverter(); messageConverters.add(gsonHttpMessageConverter); return new HttpMessageConverters(true, messageConverters); } }

附加

如果不想要jackson就加下面的依赖忽略,如果想2个共存可以不加 ,如果共存需注意转化顺序。

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <artifactId>jackson-databind</artifactId>
                    <groupId>com.fasterxml.jackson.core</groupId>
                </exclusion>
            </exclusions>
        </dependency>