当前位置: 首页 > 知识库问答 >
问题:

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

弓华茂
2023-03-14

我有一个连接到MariaDB数据库的Spring Boot应用程序,在我意识到存在到数据库的非托管连接之前,它一直运行良好。依赖关系是使用Maven管理的。我试图使用$mysql-u root-p登录数据库,但被告知连接太多。我的印象是Spring框架自动关闭了与数据库的连接。Spring/Hibernate如何管理到MariaDB的连接?

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

来自应用程序.属性:

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:无法打开执行DDL的JDBC连接:连接太多

共有1个答案

颛孙晗昱
2023-03-14

如果您在每个请求中打开到数据库的会话,那么您必须在完成事务后关闭它,如下所示。

Session mSession = mSessionFactory.openSession();

...

mSession.close();
 类似资料:
  • 在我们正在处理的应用程序中,用户可以通过在文本字段中输入任意的JDBC连接URL来连接到外部RDBMS。我们的一个客户报告说,当他无意中试图连接到带有MySQL JDBC URL的Microsoft SQL server时,我们的应用程序服务器在0%的CPU下冻结(无限期)。 下面的Java片段说明了这种情况: 运行代码段: null 问题: 1)这可能是MariaDB JDBC驱动程序中的一个b

  • 在开发Java应用程序时,有两种连接数据库的方法。 > 使用DriverManager Connection conn=DriverManager.GetConnection(url、名称、密码);//执行查询。 应用程序属性文件在springboot中的使用 spring.jpa.hibernate.ddl-auto=none spring.datasource.url=jdbc:mysql:/

  • 我知道Java中的安全模式是在finally块中按顺序关闭结果集、语句和连接。 若您关闭连接,然后尝试关闭语句(不引发异常)。但若您试图从语句中调用任何方法,则会引发异常。 我想知道关闭连接是否会自动关闭所有由该连接创建的语句对象? 更新:我正在使用DatabaseProductVersion:Oracle Database 11g Release 11.1.0.0.0驱动程序名称:Oracle

  • 另一个宽大处理--B: 这里要注意,实体A和B之间没有隐式关系,B表中的a_id是手工处理的,因此--关系类似于一对多(A-->B),但不是jpa-hibernate关系。而且,我的FullDto有A的所有属性和B的列表: 现在,我想从A的存储库接口中提取所有内容(A和B表一次完成),如下所示:

  • 我正在尝试在我的DAO类中与Spring5自动连接Hibernate5会话工厂bean。也许有人能在这里看到我的错误?尝试过使用Hibernate4,EntityManagerFactory,但每次都没有希望。配置类: 尝试通过构造函数和setter自动连接-没有任何帮助。DAO类: 依赖关系:Spring 5.0.2.发行版,Hibernate 5.2.12.最终版

  • 我想建立一个节点集群。前面有负载平衡器的js服务(由于某些原因,不能有粘性会话)。 让我们想象一下,我有两个节点,客户机(例如,浏览器,使用socket.io)发送wss://请求,第一个节点从LB获取请求,然后它发送回客户机的“HTTP/1.1 101 Web套接字协议握手”响应。 > 在使用插座的情况下。在WebSocket连接建立以提高性能之前,它可能仍然会回退并通过http发送长轮询。这些