我有一个可以连接到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:连接太多
答案 0 :(得分:0)
如果要在每个请求中打开数据库会话,则必须在完成如下所示的事务后自行关闭数据库。
Session mSession = mSessionFactory.openSession();
...
mSession.close();