浅见池也 发表于 2017-12-20 06:32:08

一个由于springboot自动配置所产生的问题的解决

  由于我的项目里面需要使用到solr,我做了一下solr和springboot的整合,结果启动项目的时候,就报错了...报错的信息的第一行提示如下:
  

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'solrClient' defined in> Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException:   Failed to instantiate :
  Factory method 'solrClient' threw exception;
  nested exception is java.lang.NoSuchMethodError: org.apache.solr.client.solrj.impl.HttpClientUtil.createClient(Lorg/apache/solr/common/params/SolrParams;)
  Lorg/apache/http/impl/client/CloseableHttpClient;
  

  我的和solr相关的pom坐标如下:
  

  <!-- solr -->  <dependency>
  <groupId>org.apache.solr</groupId>
  <artifactId>solr-solrj</artifactId>
  </dependency>
  

  

  我的SolrClient相关的配置如下:
  

@Configuration
  
public>  @Bean
  public HttpSolrClient solr() throws MalformedURLException {
  HttpSolrClient server=new HttpSolrClient("http://192.168.200.130:8080/solr");
  return server;
  }
  
}
  

  

  我当时就郁闷了,因为实际上我启动的这个项目并没有使用到solr..和solr相关的类在另外一个应用里面,只是这两个应用都是一个父模块下面的子模块,而所有的坐标我声明在父模块里面.因此,我第一时间想到的是可能会存在jar包的冲突,因此我做了很多尝试例如使用spring-data-solr坐标,或者springboot-starter-solr的坐标,结果发现都没有用,后来我跟进断点后,一步步跟着源码走,发现在应用启动的时候,springboot就给我创建了一个HttpSolrClient,而这个错误就是在springboot创建HttpSolrClient的时候报错的.说是找不到方法..不过,考虑到我也不需要去使用springboot的自动创建HttpSolrClient特性,毕竟SolrClient我们自己创建了并且放到了spring容器中了..因此我们必须要禁用springboot和solr相关的自动配置.在网上经过一番查找后,最终我通过在App启动类上指定禁止相应的自动配置类(根据报错的信息,就是SolrAutoConfiguration这个类)解决了这个问题.如下:
  

@SpringBootApplication(exclude=SolrAutoConfiguration.class)  
@ImportResource(locations="classpath:conf/dubbo.xml")

  
public>  

  @Override
  protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
  return builder.sources(App.class);
  }
  public static void main(String[] args) {
  SpringApplication.run(App.class, args);
  }
  
}
  

  

  这个问题实际上也告诉我们,springboot的自动配置有时候也不是万能的,面对具体的情境,如果需要禁用某些配置,就在启动类上的@SpringBootApplication的exclude属性指定需要排除的自动配置类即可.
页: [1]
查看完整版本: 一个由于springboot自动配置所产生的问题的解决