gpt4 book ai didi

java - SpringBoot MySQL JDBC 无法创建池的初始连接

转载 作者:行者123 更新时间:2023-11-29 01:49:51 26 4
gpt4 key购买 nike

美好的一天!

我有一个带有 mysql jdbc 存储库的简单 springboot 应用程序。

我有连接到数据库的属性

spring.datasource.url=jdbc:mysql://*:3306/*?useSSL=false
spring.datasource.username=*
spring.datasource.password=*
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.initialize=true
spring.datasource.dbcp2.validation-query=SELECT 1
spring.datasource.dbcp2.max-total=1

我的测试数据库最多只有 10 个用户连接。当我使用控制台时

SHOW STATUS WHERE variable_name = 'threads_connected';

我可以看到现在数据库只有 5 个连接,但是当我尝试启动我的应用程序时出现异常

2018-02-28 10:26:24.115 ERROR 17360 --- [nio-8080-exec-3] o.a.tomcat.jdbc.pool.ConnectionPool : Unable to create initial connections of pool.

java.sql.SQLSyntaxErrorException: User '*' has exceeded the 'max_user_connections' resource (current value: 10)

我该如何解决?如果我在数据库上有 5 个空闲连接,而我只需要 1 个来自属性的池连接,为什么我会得到那个异常?我无法编辑 DB 上的最大连接,因为像 testDB 一样使用 Heroku。我只能编辑 tomcat 属性

最佳答案

您配置了以下属性:

spring.datasource.dbcp2.max-total=1

这表示您正在尝试使用 DBCP 2连接池。但是,当您检查堆栈跟踪时,您可以看到以下内容:

o.a.tomcat.jdbc.pool.ConnectionPool : Unable to create initial connections of pool.

由于ConnectionPool 类的包是org.apache.tomcat,这表明您实际上使用的是默认的Tomcat 连接池。这意味着您的 max-total 属性没有被正确提取。

如果你想为 Tomcat 连接池配置这个,你需要使用 maxActive 属性:

spring.datasource.tomcat.max-active=1

或者,如果您不想使用 Tomcat 连接池,您可以使用 Maven/Gradle/... 添加 DBCP 2 依赖项。如果排除默认的 Tomcat 连接池,它会自动选择 DBCP 2。

另一种可能性是使用 spring.datasource.type 属性配置它,如 the documentation 所述:

You can bypass that algorithm completely and specify the connection pool to use via the spring.datasource.type property. This is especially important if you are running your application in a Tomcat container as tomcat-jdbc is provided by default.

例如:

spring.datasource.type=org.apache.commons.dbcp2.BasicDataSource

关于java - SpringBoot MySQL JDBC 无法创建池的初始连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49024179/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com