JMeter连接PostgreSQL时出现NumberFormatException错误求助
JMeter连接PostgreSQL时触发NumberFormatException错误
问题背景
使用JMeter测试PostgreSQL数据库连通性,已通过Maven完成相关依赖安装,但运行测试代码时抛出java.lang.NumberFormatException异常。
错误堆栈
22:13:11.597 [main] ERROR org.apache.jmeter.engine.StandardJMeterEngine - Unable to execute testStarted(null) for test element org.apache.jmeter.protocol.jdbc.config.DataSourceElement@a9aedfb2 java.lang.NumberFormatException: For input string: "" at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:67) ~[?:?] at java.base/java.lang.Integer.parseInt(Integer.java:671) ~[?:?] at java.base/java.lang.Integer.parseInt(Integer.java:777) ~[?:?] at org.apache.jmeter.protocol.jdbc.config.DataSourceElement.initPool(DataSourceElement.java:221) ~[ApacheJMeter_jdbc-5.6.3.jar:5.6.3] at org.apache.jmeter.protocol.jdbc.config.DataSourceElement.testStarted(DataSourceElement.java:128) ~[ApacheJMeter_jdbc-5.6.3.jar:5.6.3] at org.apache.jmeter.engine.StandardJMeterEngine.notifyTestListenersOfStart(StandardJMeterEngine.java:247) [ApacheJMeter_core-5.6.3.jar:5.6.3] at org.apache.jmeter.engine.StandardJMeterEngine.run(StandardJMeterEngine.java:432) [ApacheJMeter_core-5.6.3.jar:5.6.3] at org.example.Main.main(Main.java:197) [classes/:?]
测试代码
JMeterUtils.initLocale(); TestPlan testPlan = new TestPlan("Database Reachability Test Plan"); ListedHashTree testPlanTree = new ListedHashTree(); testPlanTree.add(testPlan); DataSourceElement dataSource = new DataSourceElement(); dataSource.setProperty("dataSource", "MyPostgreSQLDataSource"); dataSource.setName("MyPostgreSQLDataSource"); // 设置数据源名称 dataSource.setProperty("dbUrl", "jdbc:postgresql://localhost:5432/postgres"); dataSource.setProperty("driver", "org.postgresql.Driver"); dataSource.setProperty("username", "postgres"); dataSource.setProperty("password", "postgres"); dataSource.setAutocommit(true); dataSource.setPoolMax("0"); dataSource.setProperty("connectionAge", "5000"); dataSource.setProperty("timeout", "10000"); dataSource.setProperty("trimInterval", "60000"); // JDBC Sampler JDBCSampler jdbcSampler = new JDBCSampler(); jdbcSampler.setName("Database Reachability Test"); jdbcSampler.setProperty("dataSource", "MyPostgreSQLDataSource"); jdbcSampler.setQuery("select * from street;");
问题原因与修复方案
异常是因为DataSourceElement初始化连接池时,某个需要整数类型的参数被传入空字符串。查看代码可知,你仅设置了poolMax为"0",但未指定poolMin参数,而JMeter默认会尝试将未设置的poolMin解析为整数,空字符串触发转换失败。
修复步骤:
- 补充设置
poolMin参数,赋予合法整数值,示例:dataSource.setPoolMin("1"); - 建议将
poolMax也调整为合理值(比如"5"),避免连接池容量为0导致无法创建连接:dataSource.setPoolMax("5"); - 确保所有涉及数值转换的参数(如
maxWait等)都设置合法整数值,避免空字符串或非数字内容。
内容的提问来源于stack exchange,提问作者heatwave
相关产品推荐
相关产品推荐

