2017-02-08 16 views
2

Я работаю над приложением Spring Boot с Vaadin и Hibernate, и у меня проблема с hibernate MySQL, каждый раз, когда я запрашиваю базу данных, он открывает новый порт для базы данных MySQL.Почему Hibernate открывает много портов для базы данных MySQL?

, когда я исполняю netstat -ano | grep 3306 я получаю это:

TCP 127.0.0.1:62066  127.0.0.1:3306   ESTABLISHED  10956 
    TCP 127.0.0.1:62067  127.0.0.1:3306   ESTABLISHED  10956 
    TCP 127.0.0.1:62068  127.0.0.1:3306   ESTABLISHED  10956 
    TCP 127.0.0.1:62070  127.0.0.1:3306   ESTABLISHED  10956 
    TCP 127.0.0.1:62071  127.0.0.1:3306   ESTABLISHED  10956 
    TCP 127.0.0.1:62072  127.0.0.1:3306   ESTABLISHED  10956 
    TCP 127.0.0.1:62073  127.0.0.1:3306   ESTABLISHED  10956 
    TCP 127.0.0.1:62074  127.0.0.1:3306   ESTABLISHED  10956 
    TCP 127.0.0.1:62075  127.0.0.1:3306   ESTABLISHED  10956 
    TCP 127.0.0.1:62076  127.0.0.1:3306   ESTABLISHED  10956 
    TCP 127.0.0.1:62077  127.0.0.1:3306   ESTABLISHED  10956 
    TCP 127.0.0.1:62079  127.0.0.1:3306   ESTABLISHED  10956 
    TCP 127.0.0.1:62080  127.0.0.1:3306   ESTABLISHED  10956 
    TCP 127.0.0.1:62081  127.0.0.1:3306   ESTABLISHED  10956 
    TCP 127.0.0.1:62082  127.0.0.1:3306   ESTABLISHED  10956 
    TCP 127.0.0.1:62083  127.0.0.1:3306   ESTABLISHED  10956 
    TCP 127.0.0.1:62084  127.0.0.1:3306   ESTABLISHED  10956 
    TCP 127.0.0.1:62085  127.0.0.1:3306   ESTABLISHED  10956 
    TCP 127.0.0.1:62086  127.0.0.1:3306   ESTABLISHED  10956 
    TCP 127.0.0.1:62092  127.0.0.1:3306   ESTABLISHED  10956 
    TCP 127.0.0.1:62093  127.0.0.1:3306   ESTABLISHED  10956 
    TCP 127.0.0.1:62094  127.0.0.1:3306   ESTABLISHED  10956 
    TCP 127.0.0.1:62095  127.0.0.1:3306   ESTABLISHED  10956 
    TCP 127.0.0.1:62096  127.0.0.1:3306   ESTABLISHED  10956 
    TCP 127.0.0.1:62097  127.0.0.1:3306   ESTABLISHED  10956 
    TCP 127.0.0.1:62098  127.0.0.1:3306   ESTABLISHED  10956 
    TCP 127.0.0.1:62099  127.0.0.1:3306   ESTABLISHED  10956 
    TCP 127.0.0.1:62101  127.0.0.1:3306   ESTABLISHED  10956 
    TCP 127.0.0.1:62102  127.0.0.1:3306   ESTABLISHED  10956 ....... 

Что я могу сделать, чтобы избежать этого?

+0

Можете ли вы предоставить пример запроса? Я имею в виду метод, который открывает сеанс, выдает запрос и закрывает сеанс? Спасибо. – gkatzioura

ответ

2

Это связано с тем, что ваш ConnectionPoolManager создает такое количество соединений, которые повторно используются вашим приложением. Несколько соединений позволяют вашему приложению использовать БД одновременно. вы можете уменьшить это, используя hibernate.cfg.xml или persistance.xml. О том, как это сделать, вам необходимо прочитать документы ConnectionPoolManager, которые вы используете (либо встроенный, либо, например, C3P0)

Вы можете попытаться предоставить файл конфигурации для дальнейшей помощи.

+0

Спасибо @Antoniossss за ваше время. Могу ли я предоставить мне ссылку на то, как мы можем это сделать? – MBX

+0

@MounirBoussetta http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#boot-features-configure-datasource здесь у вас есть конфигурация Spring, но я не могу гарантировать, что это применимо для вас - вы ничего не говорили о вашей текущей конфигурации (и о том, что вы используете Spring; P) – Antoniossss

0

Из фрагмента я полагаю, что вы правильно открываете и закрываете сеанс. Сессия извлекает соединение из источника данных, если это необходимо, поэтому очень важно закрыть его, как только вы закончите с вашими действиями.

Если соединения, которые кажутся открытыми, увеличиваются, у вас возникает утечка соединения.

Если вы видите постоянное количество соединений, открытых во время жизненного цикла вашего приложения, вам необходимо проверить конфигурацию источника данных и количество подключений, которые должны быть открыты.

Например, когда речь идет о C3P0 источника данных для cpds.setMinPoolSize(5)

вы не собираетесь иметь 5 открытых соединений независимо от того, что.

+1

Спасибо @gkatzioura, я попробую c3p0 – MBX

+0

Не нужно менять источник данных. Просто проверьте, сколько подключений, которые вы установили для открытия, обязательно в соответствии с вашим текущим источником данных. – gkatzioura

+0

Есть ли способ установить номер подключения в Spring buil-in application.properties? – MBX

0

Я нашел решение. Проблема была в Hibernate, она не закрывает сессию автоматически, чтобы исправить проблему, я просто установил hibernate connection release mode. Для меня я установил эти свойства спящего режима в application.properties:

#hibernate properties 
spring.jpa.properties.hibernate.current_session_context_class=org.springframework.orm.hibernate5.SpringSessionContext 
spring.jpa.properties.hibernate.transaction.auto_close_session=true 
spring.jpa.properties.hibernate.connection.release_mode=after_statement 

 Смежные вопросы

  • Нет связанных вопросов^_^