使用Spring Boot和Hibernate时是否自动关闭与MariaDB的连接?

时间:2019-06-06 22:26:08

标签: hibernate spring-boot mariadb

我有一个可以连接到MariaDB数据库的Spring Boot应用程序,在我意识到与数据库的连接不受管理之前,它运行良好。依赖关系是使用Maven管理的。我尝试使用$ mysql -u root -p登录数据库,并被告知连接过多。我的印象是Spring Framework自动关闭了与数据库的连接。 Spring / Hibernate如何管理与MariaDB的连接?

我试图增加mysql中的max_connections,但是由于“连接太多”错误消息,我无法登录mysql。我发现的大多数解决方案都要求您首先登录mysql。

我认为问题可能出在我指定了spring.jpa.hibernate.ddl-auto作为validate的application.properties文件中。我这样做是为了使休眠状态不会修改用于创建表的SQL。也许使用create-drop可以解决问题?

来自pom.xml的相关依赖项:

    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
            <groupId>org.mariadb.jdbc</groupId>
            <artifactId>mariadb-java-client</artifactId>
            <version>1.1.9</version>
        </dependency>
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-search-engine</artifactId>
            <version>5.6.1.Final</version>
            <exclusions>
                <exclusion>
                    <groupId>org.jboss.logging</groupId>
                    <artifactId>jboss-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-search-orm -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-search-orm</artifactId>
            <version>5.6.1.Final</version>
            <exclusions>
                <exclusion>
                    <groupId>org.jboss.logging</groupId>
                    <artifactId>jboss-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

来自application.properties:

spring.datasource.username=root
spring.datasource.password=example-password

spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
# Keep the connection alive if idle for a long time (needed in production)
spring.datasource.testWhileIdle=true
spring.datasource.validationQuery=SELECT 1
# ===============================
# = JPA / HIBERNATE
# ===============================
# Show or not log for each sql query
spring.jpa.show-sql=true
# Hibernate ddl auto (create, create-drop, update): with "create-drop" the database
# schema will be automatically created afresh for every start of application
spring.jpa.hibernate.ddl-auto=validate
# Naming strategy
spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyHbmImpl
spring.jpa.hibernate.naming.physical-strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy
# Allows Hibernate to generate SQL optimized for a particular DBMS
<<<<<<< HEAD
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
=======
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
>>>>>>> 353345d141a2f83e8155574a9c8bbc04805ee1ee

在尝试登录mysql服务器时,我收到错误消息:“连接太多”。

类似地,如果我现在尝试使用Maven运行应用程序,则会收到:

无法建立Hibernate SessionFactory;嵌套的异常是org.hibernate.exception.GenericJDBCException:无法打开JDBC连接以执行DDL:连接太多

1 个答案:

答案 0 :(得分:0)

如果要在每个请求中打开数据库会话,则必须在完成如下所示的事务后自行关闭数据库。

Session mSession = mSessionFactory.openSession();

...

mSession.close();