aspectj-maven-plugin Lombok 共存及编译后织入
应用场景:
通过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;
/**
* es 切面管理
*/
@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() {
}
/**
* es client 查询处理
*/
@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 相关配置
<dependencies>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>${aspectjweaver.version}</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-client</artifactId>
<scope>compile</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<version>${aspectj-maven-plugin.version}</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<proc>none</proc>
<complianceLevel>${java.version}</complianceLevel>
<showWeaveInfo>false</showWeaveInfo>
<forceAjcCompile>true</forceAjcCompile>
<sources/>
<weaveDirectories>
<weaveDirectory>${project.build.directory}/classes</weaveDirectory>
</weaveDirectories>
<weaveDependencies>
<weaveDependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-client</artifactId>
</weaveDependency>
</weaveDependencies>
</configuration>
<executions>
<execution>
<goals>
<goal>compile</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
3. 打包编译
- 执行打包编译命令
mvn -DskipTests=true -pl 项目名称 -am clean package - 可以确认一下jar包或者target中是否包含 重新编译后的文件: