SpringBoot集成ElasticSearch出现的异常

本文讲述了在SpringBoot 2.2.8版本集成ElasticSearch 6.8.10时遇到的Netty冲突问题,由于ElasticSearch和Redis底层都使用Netty,导致启动异常。解决方案是在启动类中通过设置es.set.netty.runtime.available.processors为false避免冲突。同时提醒注意ElasticSearch版本一致性,避免6版和7版混用。
摘要由CSDN通过智能技术生成

1. 异常

在使用springboot2.2.8+elasticsearch6.8.10时,测试时报错:

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'elasticsearchClient' defined in class path resource [org/springframework/boot/autoconfigure/data/elasticsearch/ElasticsearchAutoConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.elasticsearch.client.transport.TransportClient]: Factory method 'elasticsearchClient' threw exception; nested exception is java.lang.IllegalStateException: availableProcessors is already set to [4], rejecting [4]

2. 原因

  • Elasticsearch 和 Redis 底层都使用到了 Netty , 在项目启动时会冲突。

涉及到的类:NettyRuntime,Netty4Util。

  • 查看NettyRuntime类,可以看下源码:
public final class NettyRuntime {
   
    private static final NettyRuntime.AvailableProcessorsHolder holder = new NettyRuntime.AvailableProcessorsHolder();

    public static void setAvailableProcessors(int availableProcessors) {
   
        holder.setAvailableProcessors(availableProcessors);
    }

    public static int availableProcessors() {
   
        return holder.availableProcessors();
    }

    private NettyRuntime() {
   
    }

    static class AvailableProcessorsHolder {
   
        private int avail
Spring Boot 集成 ESAPI (Enterprise Security API) 主要是为了增强应用程序的安全性和遵循一些最佳实践。ESAPI是一个开源框架,提供了许多用于输入验证、数据加密、访问控制等安全功能。以下是将ESAPI集成Spring Boot项目的基本步骤: 1. 添加依赖:首先,在你的`pom.xml`文件中添加ESAPI的Maven坐标,例如: ```xml <dependency> <groupId>org.owasp.esapi</groupId> <artifactId>esapi</artifactId> <version>4.x.y</version> </dependency> ``` 替换`x.y`为实际版本。 2. 初始化:在Spring Boot应用启动时,需要初始化ESAPI并配置环境。通常会创建一个Bean来管理ESAPI实例,如下: ```java @Configuration public class EsapiConfig { @Value("${esapi.config.path}") private String configPath; @Bean public EsapiFactory esapiFactory() { File configFile = new File(configPath); return new IniFileConfigurationLoader().getEsapiFactory(configFile); } } ``` 记得设置`esapi.config.path`属性指向包含ESAPI配置文件的路径。 3. 使用API:在业务层,你可以通过注入`EsapiFactory`来获取ESAPI实例,并调用其提供的各种安全方法,如校验用户输入、加密敏感数据等。 ```java @Autowired private EsapiFactory esapi; public void secureFunction(String userInput) { InputValidation inputValidator = esapi.getValidator(); try { if (!inputValidator.inputValid(userInput)) { // 输入无效处理 } else { // 正常处理 } } catch (ValidationException e) { // 处理验证异常 } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值