使用Groovy的JSR223采样器连接MongoDB时Maven执行报错
解决JMeter Groovy采样器连接MongoDB在Maven执行时的MissingMethodException问题
哎,这个问题我太熟了!十有八九是MongoDB驱动版本不一致搞的鬼——JMeter本身自带了一套MongoDB驱动,而你的Maven项目用的是另一个版本,两个版本里的方法签名或者存在性不一样,就导致Maven跑的时候找不到方法了。
咱们一步步来排查解决:
1. 先确认JMeter内置的MongoDB驱动版本
打开你本地JMeter安装目录下的lib文件夹,找名字类似mongo-java-driver-xxx.jar的文件(如果是MongoDB 4.x+版本,可能是mongodb-driver-sync-xxx.jar),记下后面的版本号,比如3.12.10或者4.11.1。
2. 让Maven项目对齐驱动版本
在你的pom.xml里添加或修改MongoDB驱动依赖,版本和JMeter内置的完全一致:
- 如果是3.x版本的驱动:
<dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-java-driver</artifactId> <version>3.12.10</version> <!-- 替换成你JMeter里的实际版本 --> </dependency> - 如果是4.x+版本的驱动:
<dependency> <groupId>org.mongodb</groupId> <artifactId>mongodb-driver-sync</artifactId> <version>4.11.1</version> <!-- 替换成你JMeter里的实际版本 --> </dependency>
3. 排查Maven依赖冲突
有时候其他依赖会偷偷引入不同版本的MongoDB驱动,导致版本混乱。用这个命令查看依赖树:
mvn dependency:tree
如果看到有其他依赖引入了不一致的MongoDB驱动,就把它排除掉,比如:
<dependency> <groupId>你的某个依赖</groupId> <artifactId>依赖名称</artifactId> <exclusions> <exclusion> <groupId>org.mongodb</groupId> <artifactId>mongo-java-driver</artifactId> <!-- 对应冲突的驱动artifactId --> </exclusion> </exclusions> </dependency>
4. 适配不同版本的代码写法
如果你的Maven用的是4.x+的驱动,旧的MongoClient构造方法已经被弃用了,得换成新的写法,不然也会报错。把你的代码改成:
import com.mongodb.MongoCredential import com.mongodb.ServerAddress import com.mongodb.client.MongoClients import com.mongodb.MongoClientSettings import java.util.Arrays MongoCredential mongoCredential = MongoCredential.createScramSha1Credential("PIDPCR","adm",'pRU6Ref'.toCharArray()); MongoClientSettings settings = MongoClientSettings.builder() .applyToClusterSettings { builder -> builder.hosts(Arrays.asList(new ServerAddress("${addr}", 27017))) } .credential(mongoCredential) .build(); coreMongoClient = MongoClients.create(settings);
核心思路就是:让JMeter和Maven环境用完全相同的MongoDB驱动版本,要么对齐版本,要么调整代码适配对应的版本,这样方法签名就不会不匹配了。
内容的提问来源于stack exchange,提问作者Jyotish
相关产品推荐
相关产品推荐

