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

Java SpringBoot MySQL JDBC无法创建池的初始连接,java,mysql,tomcat,spring-boot,Java,Mysql,Tomcat,Spring Boot,你好 我有一个带有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.init

你好

我有一个带有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';
我可以看到现在DB只有5个连接,但当我尝试启动我的应用程序时,我遇到了异常

2018-02-28 10:26:24.115错误17360---[nio-8080-exec-3] o、 a.tomcat.jdbc.pool.ConnectionPool:无法创建初始 连接池

java.sql.SQLSyntaxErrorException:用户“*”已超过 “最大用户连接数”资源(当前值:10)


我怎样才能修好它?如果我在DB上有5个空闲连接,而我只需要1个属性池连接,为什么会出现这种异常?我无法在DB上编辑max connection,因为我使用的是像testDB这样的Heroku。我只能编辑tomcat属性,只能编辑

您配置了以下属性:

spring.datasource.dbcp2.max-total=1
spring.datasource.tomcat.max-active=1
这表示您正在尝试使用连接池。但是,当您检查stacktrace时,可以看到以下内容:

o.a.tomcat.jdbc.pool.ConnectionPool : Unable to create initial connections of pool.
由于
ConnectionPool
类的包是
org.apache.tomcat
,这表明您实际使用的是默认的tomcat连接池。这意味着您的
max total
poperty没有被正确提取

如果要为Tomcat连接池配置此选项,则需要使用
maxActive
属性:

spring.datasource.dbcp2.max-total=1
spring.datasource.tomcat.max-active=1

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

另一种可能是使用
spring.datasource.type
属性对其进行配置,如下所述:

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

例如:

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

我也遇到了类似的情况,但简单的修复方法可能类似于您在
应用程序中指向的数据库。属性可能不存在


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

我遇到了完全相同的错误,在将spring启动版本从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>

org.springframework.boot
spring启动程序父级
2.1.8.1发布

这里也有同样的问题。。。SaravanaKumar说,试着在parent上更改版本,但是这个项目太旧了,我收到了很多反对意见

我只修改了数据库版本


mysql
mysql连接器java
8.0.23 
运行时

注意:如果在父项上进行更新,则所有依赖项都将得到更新。

可能与Greate重复!这就是答案!谢谢