我在 spring boot 中使用 hikaricp 作为默认连接池。但是,即使我指定了 50 个最大连接数,应用程序也无法获得连接,并且我运行了一个 jmeter 测试计划来运行 50 个线程。 我不断收到 504 网关超时错误。
我的 application.properties 有:
spring.datasource.url=jdbc:mysql://localhost:3306/mydb?autoreconnect=true
spring.datasource.username=myuser
spring.datasource.password=mypassword
spring.datasource.hikari.driver-class-name=com.mysql.cj.jdbc.Driver
logging.level.reactor.netty.http.client=DEBUG
spring.jackson.default-property-inclusion=NON_NULL
spring.datasource.hikari.data-source-properties.cachePrepStmts=true
spring.datasource.hikari.data-source-properties.prepStmtCacheSize=250
spring.datasource.hikari.data-source-properties.prepStmtCacheSqlLimit=2048
spring.datasource.hikari.data-source-properties.useServerPrepStmts=true
spring.datasource.hikari.data-source-properties.useLocalSessionState=true
spring.datasource.hikari.data-source-properties.rewriteBatchedStatements=true
spring.datasource.hikari.data-source-properties.cacheResultSetMetadata=true
spring.datasource.hikari.data-source-properties.cacheServerConfiguration=true
spring.datasource.hikari.data-source-properties.maintainTimeStats=false
spring.datasource.hikari.connection-timeout=60000
spring.datasource.hikari.maximum-pool-size=50
spring.datasource.hikari.minimum-idle=20
spring.datasource.hikari.auto-commit=true
spring.datasource.hikari.idle-timeout=300000
spring.jpa.open-in-view=false
我的代码说:
try {
Connection con = dataSource.getConnection();
PreparedStatement pstmt = con.prepareStatement(USER_CREDS_QUERY);
pstmt.setString(1, username);
ResultSet rst = pstmt.executeQuery();
rst.next();
user.setUsername(rst.getString(1));
user.setPassword(rst.getString(2));
user.setSalt(rst.getString(3));
rst.close();
pstmt.close();
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
LOG.error("Error in findUser ", e.getMessage());
}
我的 jmeter 测试计划有 线程数设置为 50 和 启动时间设置为 15 秒.
当我将 最大池大小设置为 20,并且 请求 20 个线程 时,这很好用。
知道我哪里不见了吗?
MySQL 5.7
Spring Boot 2.7.9
HikariCP 4.0.3
谢谢