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

时间:2018-02-28 07:34:02

标签: java mysql tomcat spring-boot

美好的一天!

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

我有连接到DB的属性

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';

我可以看到现在DB只有5个连接但是当我尝试启动我的应用程序时,我得到了Exception

  

2018-02-28 10:26:24.115 ERROR 17360 --- [nio-8080-exec-3]   o.a.tomcat.jdbc.pool.ConnectionPool:无法创建初始化   游泳池的连接。

     

java.sql.SQLSyntaxErrorException:用户'*'超出了   'max_user_connections'资源(当前值:10)

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

4 个答案:

答案 0 :(得分:2)

您配置了以下属性:

spring.datasource.dbcp2.max-total=1

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

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。

另一种可能性是使用DBCP 2提到的spring.datasource.type属性对其进行配置:

  

您可以完全绕过该算法,并通过spring.datasource.type属性指定要使用的连接池。如果您在Tomcat容器中运行应用程序,则这一点尤为重要,因为默认情况下会提供tomcat-jdbc。

例如:

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

答案 1 :(得分:0)

我陷入了类似的情况,但是对此的简单解决方法可能就像您指向application.properties的数据库可能不存在。

或者您可以尝试从C:\Users\{yourusername}\.m2文件夹中删除org.springframework.data文件夹并更新Maven项目。

答案 2 :(得分:0)

我遇到了完全相同的错误,并且在将Spring Boot版本从1.5。*更改为2.1.8后,它为我工作。

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.8.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

答案 3 :(得分:0)

这里有同样的问题...尝试像 SaravanaKumar 所说的那样更改父级的版本,但该项目太旧了,我被弃用了很多。

我只修改了数据库版本

<块引用>
  <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.23</version> <!--Add that Line-->
      <scope>runtime</scope>
  </dependency>

注意:如果更新父级所有依赖项都会更新。