- 应用场景:
- 实现方案
- 1. 编写AOP逻辑
- 2. pom 相关配置
- 3. 打包编译
通过AOP 方式拦截 es lowleve api 查询,处理返回结果失败的问题
需要处理方法:org.elasticsearch.client.RestClient#performRequest(org.elasticsearch.client.Request)
编写AOP实现,通过maven插件aspectj-maven-plugin 将AOP逻辑织入es的client jar(elasticsearch-rest-client-7.6.2.jar)包中。
1. 编写AOP逻辑主要代码
import static org.apache.http.HttpStatus.SC_MULTIPLE_CHOICES;
import static org.apache.http.HttpStatus.SC_OK;
import java.io.IOException;
import org.apache.http.HttpEntity;
import org.apache.http.util.EntityUtils;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.elasticsearch.client.Request;
import org.elasticsearch.client.Response;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Aspect
public class ElasticsearchAspectj {
private static Logger log = LoggerFactory.getLogger(ElasticsearchAspectj.class);
@Pointcut("execution(org.elasticsearch.client.Response org.elasticsearch.client.RestClient.performRequest(org.elasticsearch.client.Request))")
public void restClientPerformRequest() {
}
@Around("restClientPerformRequest()")
public Object restClientPerformRequestProcess(ProceedingJoinPoint pj) throws Throwable {
Object[] args = pj.getArgs();
Request request = null;
if (args.length > 0) {
request = (Request) args[0];
}
Response response = (Response) pj.proceed();
//todo
handleResponse(response, request);
return response;
}
}
2. pom 相关配置
3. 打包编译org.aspectj aspectjrt ${aspectjweaver.version} org.elasticsearch.client elasticsearch-rest-client compile org.codehaus.mojo aspectj-maven-plugin ${aspectj-maven-plugin.version} ${java.version} ${java.version} none ${java.version} false true ${project.build.directory}/classes org.elasticsearch.client elasticsearch-rest-client compile
- 执行打包编译命令
mvn -DskipTests=true -pl 项目名称 -am clean package - 可以确认一下jar包或者target中是否包含 重新编译后的文件:



