Подтвердить что ты не робот

Как управлять пулом подключений к базе данных в spring jpa?

Я использую spring -boot в своем веб-приложении и использую spring -jpa для чтения/записи из/в мою базу данных. Он работает очень хорошо, но я хочу понять, как управлять соединениями с базой данных. Ниже приведена моя конфигурация свойств для базы данных:

spring.datasource.url=jdbc:mysql://localhost:3306/test?characterEncoding=utf8
spring.datasource.username=user
spring.datasource.password=pwd
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.max-active=500

Я установил максимальные соединения на 500. Когда пользователь делает запрос в моем приложении spring, для него будет открыто соединение с базой данных. После завершения запроса будет spring jpa закрыть это соединение? Если нет, когда он закроет неиспользуемые соединения?

Я прочитал справочный документ spring jpa из http://docs.spring.io/spring-data/jpa/docs/current/reference/html/. Но он ничего не говорит о связях.

4b9b3361

Ответ 1

При использовании пула соединений с БД вызов sqlconnection.close() не обязательно приведет к закрытию супертяжелого соединения с базой данных, вместо этого чаще всего будет просто освободить соединение как повторно используемое в пуле. Поэтому рекомендуется использовать close() при подключении как можно скорее при использовании пула соединений на стороне клиента.

В вашей конфигурации пул будет содержать максимальное число 500 подключений (было бы также полезно настроить maxIdle, minIdle и minEvictableIdleTimeMillis для настройки количества готовых подключений и способов часто для их выпуска, когда они не используются).

Еще несколько doc здесь

Ответ 2

Вы уже нашли, что вы можете настроить это из application.properties Вы можете найти все возможные свойства здесь.

Обратите внимание, что из Spring Boot 1.4 существуют свойства datasource для каждого поставщика данных, который Spring интегрируется с, из коробки. Существует spring.datasource.dbcp.*, spring.datasource.tomcat.* и т.д. См. 1.4 docs

Если этого недостаточно, и вам нужно что-то очень конкретное, вы можете сами объявить источник данных bean. Вот пример с источником данных Tomcat:

@Bean
public DataSource dataSource(){
     PoolProperties p = new PoolProperties();
          p.setUrl("jdbc:mysql://localhost:3306/mysql");
          p.setDriverClassName("com.mysql.jdbc.Driver");
          p.setUsername("root");
          p.setPassword("password");
          p.setJmxEnabled(true);
          p.setTestWhileIdle(false);
          p.setTestOnBorrow(true);
          p.setValidationQuery("SELECT 1");
          p.setTestOnReturn(false);
          p.setValidationInterval(30000);
          p.setTimeBetweenEvictionRunsMillis(30000);
          p.setMaxActive(100);
          p.setInitialSize(10);
          p.setMaxWait(10000);
          p.setRemoveAbandonedTimeout(60);
          p.setMinEvictableIdleTimeMillis(30000);
          p.setMinIdle(10);
          p.setLogAbandoned(true);
          p.setRemoveAbandoned(true);
          p.setJdbcInterceptors(
            "org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;"+
            "org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer");
          DataSource datasource = new DataSource();
          datasource.setPoolProperties(p);
          return datasource ;
}