У меня есть приложение Spring Boot, которое подключается к базе данных MariaDB, и оно работало нормально, пока я не осознал, что к базе данных были неуправляемые подключения.Зависимости управляются с помощью Maven.Я попытался войти в базу данных, используя $ mysql -u root -p, и мне сообщили, что существует слишком много соединений.У меня сложилось впечатление, что Spring Framework автоматически закрывает соединения с базой данных.Как Spring / Hibernate управляет подключениями к MariaDB?
Я пытался увеличить max_connections в mysql, однако я не могу войти в mysql из-за сообщения об ошибке «слишком много соединений».Большинство найденных решений требуют, чтобы вы сначала вошли в MySQL.
Я думаю, что проблема может быть в моем файле application.properties, где я указал spring.jpa.hibernate.ddl-auto в качестве проверки.Я сделал это так, чтобы Hibernate не изменил 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: слишком много подключений