spring-data-elasticsearch与netty版本冲突问题

具体问题是java.lang.IllegalStateException: availableProcessors is already set to [8], rejecting [8]

注:项目是springcloud-alibaba,es版本是6.6

springboot整合elasticsearch中使用到了spring-data-elasticsearch,之前自己写demo的时候没有问题,但加到项目中时出现以上问题,归根结底是跟项目本身引入的netty有版本冲突问题
解决方案一
最简单直接且行之有效的方法是在application中添加一行代码

public class XXXApplication {
    public static void main(String[] args) {
        //初始化启动,解决 java.lang.IllegalArgumentException:availableProcessors is already set to [8], rejecting [8]
        System.setProperty("es.set.netty.runtime.available.processors", "false");
        SpringApplication.run(XXXApplication .class, args);
    }
}

这个方法可行,但是怎么看都不大优雅,于是当时继续找解决方案,既然是System.setProperty,那么至少还有两种解决方案,第一个是写配置类即@Configuration的方式,但是几乎全网找遍也没一个可用的配置类。。。也怪自己对框架的认知不深,那么还有一个方案,就是在yml或者properties文件中配置,两个字总结一下——扑街;

由于当时手头还有很多事,就先使用了上面提到的解决方案,搁置了

时间到了当下,写了测试类,发现测试类居然不能运行,报错也是同个报错;即项目本身使用上面的解决方案没问题,但测试类无法读懂application中的配置;这对后面的持续集成写测试用例有一定的影响;感谢 浮生、、的博客

解决方案二

import org.springframework.context.annotation.Configuration;

import javax.annotation.PostConstruct;

/**
 * @author chengs
 * @description
 * @createTime 2020/1/14 11:19
 * @refer
 */
@Configuration
public class ElasticSearchConfig {

    @PostConstruct
    void init() {
        System.setProperty("es.set.netty.runtime.available.processors", "false");
    }
}

2020/03/23修改

jar包运行问题

以上使用解决方案二解决 java.lang.IllegalStateException: availableProcessors is already set to [8], rejecting [8] 问题的方式存在问题——将项目打包成jar包运行时候,依旧会报类似错误导致启动不成功,直接原因是jar启动无法正常扫描到 @Configuration + @PostConstruct 注解下的内容;可以改成 @Service+ @PostConstruct;

而使用上文的解决方案一,jar就能正常运行

你可能感兴趣的:(spring-data-elasticsearch与netty版本冲突问题)