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

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'solrClient' defined in class path resource [org/springframework/boot/autoconfigure/solr/SolrAutoConfiguration.class]:
Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException:
Failed to instantiate [org.apache.solr.client.solrj.SolrClient]:
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 class SolrConfig {
@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 class App extends SpringBootServletInitializer { @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属性指定需要排除的自动配置类即可.

一个由于springboot自动配置所产生的问题的解决的更多相关文章

  1. 如何编写Spring-Boot自动配置

    摘要 本文主要介绍如何把一个spring的项目(特别是一些公共工具类项目),基于spring boot的自动配置的思想封装起来,使其他Spring-Boot项目引入后能够进行快速配置. AutoCon ...

  2. SpringBoot自动配置源码调试

    之前对SpringBoot的自动配置原理进行了较为详细的介绍(https://www.cnblogs.com/stm32stm32/p/10560933.html),接下来就对自动配置进行源码调试,探 ...

  3. SpringBoot实战之SpringBoot自动配置原理

    SpringBoot 自动配置主要通过 @EnableAutoConfiguration, @Conditional, @EnableConfigurationProperties 或者 @Confi ...

  4. Spring Boot 揭秘与实战 自己实现一个简单的自动配置模块

    文章目录 1. 实战的开端 – Maven搭建 2. 参数的配置 - 属性参数类 3. 真的很简单 - 简单的服务类 4. 自动配置的核心 - 自动配置类 5. spring.factories 不要 ...

  5. springboot自动配置源码解析

    springboot版本:2.1.6.RELEASE SpringBoot 自动配置主要通过 @EnableAutoConfiguration, @Conditional, @EnableConfig ...

  6. 源码学习系列之SpringBoot自动配置(篇一)

    源码学习系列之SpringBoot自动配置源码学习(篇一) ok,本博客尝试跟一下Springboot的自动配置源码,做一下笔记记录,自动配置是Springboot的一个很关键的特性,也容易被忽略的属 ...

  7. 源码学习系列之SpringBoot自动配置(篇二)

    源码学习系列之SpringBoot自动配置(篇二)之HttpEncodingAutoConfiguration 源码分析 继上一篇博客源码学习系列之SpringBoot自动配置(篇一)之后,本博客继续 ...

  8. Springboot 自动配置浅析

    Introduction 我们知道,SpringBoot之所以强大,就是因为他提供了各种默认的配置,可以让我们在集成各个组件的时候从各种各样的配置文件中解放出来. 拿一个最普通的 web 项目举例.我 ...

  9. SpringBoot自动配置原理学习

    介绍 构建Springboot项目时我们会创建一个启动类 @SpringBootApplication public class DemoApplication { public static voi ...

随机推荐

  1. 求 1+2+3+ …… +n

    题目来源: 自我感觉难度/真实难度: 题意: 分析: 自己的代码: def Sum_Solution(n): # write code here if n==1: return 1 else: ans ...

  2. php判断一个数组是否为另一个数组子集的方法

    原文地址http://www.jbxue.com/article/14703.html // 快速的判断$a数组是否是$b数组的子集  $a = array(135,138);  $b = array ...

  3. SonarQube-Centos环境设置为系统服务

    1.准备工作 官方文档:https://docs.sonarqube.org/latest/setup/operate-server/ 2.配置 /sonar.sh /usr/bin/sonar cd ...

  4. Regionserver启动后又关闭

    今天启动hbase shell,输入hbase命令时报错: ERROR [regionserver/regionserver1/172.18.0.61:16020] reggionserver.HRe ...

  5. 大数据入门第二十四天——SparkStreaming(二)与flume、kafka整合

    前一篇中数据源采用的是从一个socket中拿数据,有点属于“旁门左道”,正经的是从kafka等消息队列中拿数据! 主要支持的source,由官网得知如下: 获取数据的形式包括推送push和拉取pull ...

  6. 2017-2018-2 20155233『网络对抗技术』Exp6:信息收集与漏洞扫描

    通过DNS和IP挖掘目标网站的信息 whois查询:用来进行域名注册信息查询,以得到3R注册信息,包括注册人的名字.组织.城市等信息.(进行whois查询时去掉www等前缀,因为注册域名时通常会注册一 ...

  7. RocEDU.课程设计2018 第二周进展 博客补交

    本周计划完成的任务 (1).将开发板和平板电脑及其相关配件连通,并和电脑连接. (2).将代码的运行设备从安卓模拟器改为试验箱的平板电脑,平板电脑上实现软件. 本周实际完成情况 (1).计划完成的第一 ...

  8. POJ2488&&3083&&3009&&1321&&2251&&2049

    刷完了大力数据结构(水比数据结构专题)后又开始搞无脑搜索专题了 这次的标签是DFS(这TM的到现在了谁还不会) 2488 跳马问题:给出一个棋盘,让你求一个方案使一匹马能花最短的时间不重复不遗漏地跳完 ...

  9. JavaScript中call,apply,bind方法的区别

    call,apply,bind方法一般用来指定this的环境. var a = { user:"hahaha", fn:function(){ console.log(this.u ...

  10. Java 多线程(三)之线程状态及其验证

    目录 线程状态 Thread.State 状态类型 定义 说明 状态转换 状态验证 「NEW」-> 「RUNNABLE」 -> 「TERMINATED」 「RUNNABLE」 -> ...