SpringBoot,Springmvc Spring 知识总结


1 非常经典的初始化resttemplate的方法


  通过配置加上 条件注解实现,实现功能有设置超时参数,修改传递编码,添加拦截器等


@Configuration
@ConditionalOnClass(value = {RestTemplate.class, HttpClient.class})
public class RestTemplateConfiguration {
 
  @Value("${remote.maxTotalConnect:0}")
  private int maxTotalConnect; //连接池的最大连接数默认为0
  @Value("${remote.maxConnectPerRoute:200}")
  private int maxConnectPerRoute; //单个主机的最大连接数
  @Value("${remote.connectTimeout:2000}")
  private int connectTimeout; //连接超时默认2s
  @Value("${remote.readTimeout:30000}")
  private int readTimeout; //读取超时默认30s
 
  //创建HTTP客户端工厂
  private ClientHttpRequestFactory createFactory() {
    if (this.maxTotalConnect <= 0) {
      SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
      factory.setConnectTimeout(this.connectTimeout);
      factory.setReadTimeout(this.readTimeout);
      return factory;
    }
    HttpClient httpClient = HttpClientBuilder.create().setMaxConnTotal(this.maxTotalConnect)
        .setMaxConnPerRoute(this.maxConnectPerRoute).build();
    HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(
        httpClient);
    factory.setConnectTimeout(this.connectTimeout);
    factory.setReadTimeout(this.readTimeout);
    return factory;
  }
 
  //初始化RestTemplate,并加入spring的Bean工厂,由spring统一管理
  @Bean
  @ConditionalOnMissingBean(RestTemplate.class)
  public RestTemplate getRestTemplate() {
    RestTemplate restTemplate = new RestTemplate(this.createFactory());
    List<HttpMessageConverter<?>> converterList = restTemplate.getMessageConverters();
 
    //重新设置StringHttpMessageConverter字符集为UTF-8,解决中文乱码问题
    HttpMessageConverter<?> converterTarget = null;
    for (HttpMessageConverter<?> item : converterList) {
      if (StringHttpMessageConverter.class == item.getClass()) {
        converterTarget = item;
        break;
      }
    }
    if (null != converterTarget) {
      converterList.remove(converterTarget);
    }
    converterList.add(1, new StringHttpMessageConverter(StandardCharsets.UTF_8));
 
    //加入FastJson转换器 根据使用情况进行操作,此段注释,默认使用jackson
    //converterList.add(new FastJsonHttpMessageConverter4());
    return restTemplate;
  }
 
     private void checkAuthHeaderExist(){
        List<ClientHttpRequestInterceptor> interceptors = restTemplate.getInterceptors();
        boolean hasBasicAuth = false;
        for (int i = 0; i < interceptors.size(); i++) {
            if (interceptors.get(i)  instanceof BasicAuthorizationInterceptor) {
                hasBasicAuth =true;
            }
        }
        if(!hasBasicAuth){
            restTemplate.getInterceptors().add(new BasicAuthorizationInterceptor(username,password));
        }
 
}

2 Spring 异步编程

主要用到了两个注解 @EnableAsync用在配置上  @Async(用在 servicer主类方法里)

步骤有3步骤

a:

@Configure //等价于 spring.xml里面的 配置

@EnableAsnyn

@ComponentScna(‘com.abc’)//等价于spring.xml里面的包扫描

Configure类

b  @Service

  class MyService{

@Async

a(){}

@Async

b(){}

}

3 主测试类

myService.a();b();运行发现ab打印内容循环展示

猜你喜欢

转载自blog.csdn.net/jintianhen1/article/details/82145591
今日推荐