一个由于springboot自动配置所产生的问题的解决
2017-03-15 21:59
861 查看
由于我的项目里面需要使用到solr,我做了一下solr和springboot的整合,结果启动项目的时候,就报错了...报错的信息的第一行提示如下:
我的和solr相关的pom坐标如下:
我的SolrClient相关的配置如下:
我当时就郁闷了,因为实际上我启动的这个项目并没有使用到solr..和solr相关的类在另外一个应用里面,只是这两个应用都是一个父模块下面的子模块,而所有的坐标我声明在父模块里面.因此,我第一时间想到的是可能会存在jar包的冲突,因此我做了很多尝试例如使用spring-data-solr坐标,或者springboot-starter-solr的坐标,结果发现都没有用,后来我跟进断点后,一步步跟着源码走,发现在应用启动的时候,springboot就给我创建了一个HttpSolrClient,而这个错误就是在springboot创建HttpSolrClient的时候报错的.说是找不到方法..不过,考虑到我也不需要去使用springboot的自动创建HttpSolrClient特性,毕竟SolrClient我们自己创建了并且放到了spring容器中了..因此我们必须要禁用springboot和solr相关的自动配置.在网上经过一番查找后,最终我通过在App启动类上指定禁止相应的自动配置类(根据报错的信息,就是SolrAutoConfiguration这个类)解决了这个问题.如下:
这个问题实际上也告诉我们,springboot的自动配置有时候也不是万能的,面对具体的情境,如果需要禁用某些配置,就在启动类上的@SpringBootApplication的exclude属性指定需要排除的自动配置类即可.
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属性指定需要排除的自动配置类即可.
相关文章推荐
- Spring boot项目maven的profile多环境配置不自动替换变量的问题解决
- Spring boot 项目 maven的profile多环境配置 不自动替换变量的问题解决
- 初识Spring Boot框架(二)之DIY一个Spring Boot的自动配置
- Springboot 之 解决IDEA读取properties配置文件的中文乱码问题
- spring 中配置log4j输出日志常见的一个小问题解决方法
- Springboot 之 解决IDEA读取properties配置文件的中文乱码问题
- 转:解决VC2005程序的一个运行错误“由于应用程序的配置不正确,应用程序未能启动,重新安装应用程序可能会纠正这个问题”
- 关于Spring boot中读取属性配置文件出现中文乱码的问题的解决
- 面试问题spring boot自动配置是怎么实现的
- Springboot 之 解决IDEA读取properties配置文件的中文乱码问题
- 解决eclipse创建spring boot项目加载不到application.properties配置文件的问题
- 在Mybatis-spring中由于默认Autowired导致不能配置多个数据源的问题分析及解决
- 在Mybatis-spring中由于默认Autowired导致不能配置多个数据源的问题分析及解决
- 初识Spring Boot框架(二)之DIY一个Spring Boot的自动配置
- 初识Spring Boot框架(二)之DIY一个Spring Boot的自动配置
- 加入spring-boot后导致maven的profile多环境配置失效的问题解决
- 初识Spring Boot框架(二)之DIY一个Spring Boot的自动配置
- Spring Boot如何让Web API自动生成文档,并解决swagger-annotations的API注解description属性废弃的问题
- 初识Spring Boot框架(二)之DIY一个Spring Boot的自动配置
- SpringBoot web demo项目启动后立马自动关闭问题解决办法