springboot同时集成es与redis报错解决方案

由于毕业设计项目的需要,在spingboot集成了es前提是引入了spring-data-elasticsearch包,在使用maven打包项目时出现了如下错误

1
Failed to instantiate [org.elasticsearch.client.transport.TransportClient]: Factory method 'esTransportClientInit' threw exception; nested exception is java.lang.IllegalStateException

解决方法:

编写一个设置类解决冲突

1
2
3
4
5
6
7
@Configuration
public class ElasticSearchConfig {
@PostConstruct
void init() {
System.setProperty("es.set.netty.runtime.available.processors", "false");
}
}

这样子就可以maven正常打包了,但是打包完运行后又出现一样的报错信息,经过一番的资料查询后得知,还要在在启动类加上System.setProperty(“es.set.netty.runtime.available.processors”, “false”);如下:

1
2
3
4
5
6
7
8
9
10
11
@SpringBootApplication
@MapperScan("com.HaijieLi.blog.dao")
@EnableMongoRepositories(basePackages = {"com.HaijieLi.blog.repository"})
@EnableElasticsearchRepositories(basePackages = "com.HaijieLi.blog.esRepository")
@EnableScheduling
public class BlogApplication{
public static void main(String[] args) {
System.setProperty("es.set.netty.runtime.available.processors", "false");
SpringApplication.run(BlogApplication.class, args);
}
}

原因(参考自其他小伙伴博客)

程序的其他地方使用了Netty,这里指redis。这影响在实例化传输客户端之前初始化处理器的数量。 实例化传输客户端时,我们尝试初始化处理器的数量。 由于在其他地方使用Netty,因此已经初始化并且Netty会对此进行防范,因此首次实例化会因看到的非法状态异常而失败。

-------------本文结束您的阅读与肯定是我持续装*的最大动力-------------