2013-04-29 3 views
2

Мой код ниже. Возможно, я использую его много раз подобным образом, то есть простые слова, я управляю сессией и транзакцией таким образом:спящий режим закрытия или нет?

List<Login> users= null; 
     try{ 
      session=HibernateUtil.getSessionFactory().getCurrentSession(); 
      tx=session.beginTransaction(); 
      users=session.createQuery("from Login").list(); 
      tx.commit(); 
     }catch(Exception e){System.out.println("commit exception:"+e); 
      try {tx.rollback();} catch (Exception ex) {System.out.println("rollback exception:"+ex);} 
     }finally{if(session!=null && session.isOpen()){session.close();}} 
     return users; 

Теперь, когда я первым запустить службу базы данных (с помощью MySQL) и проверить из команды подскажите, используя этот запрос ...

show status like 'Conn%'; 

... результат:

+---------------+-------+ 
| Variable_name | Value | 
+---------------+-------+ 
| Connections | 2  | 
+---------------+-------+ 

Когда я начинаю мое приложение и использовать его. После открытия нескольких страниц и запроса одного и того же. Я получаю соединения как 6, я даже видел выше 20.

Теперь я хотел бы знать, что спящий режим закрывает соединения или нет?

Я обрабатываю все транзакции таким образом, я перекрещиваюсь и проверяю любой блок кода, не закрывая сеанс.

hibernate.cfg.xml

<hibernate-configuration> 

    <session-factory> 

     <!-- Database connection settings --> 
     <property name="connection.driver_class"> 
      com.mysql.jdbc.Driver 
     </property> 
     <property name="connection.url"> 
      jdbc:mysql://localhost:3306/shareapp 
     </property> 
     <property name="connection.username">pluto</property> 
     <property name="connection.password">admin</property> 

     <!-- JDBC connection pool (use the built-in) --> 
     <property name="connection.pool_size">1</property> 

     <!-- SQL dialect --> 
     <property name="dialect"> 
      org.hibernate.dialect.MySQLDialect 
     </property> 

     <!-- Enable Hibernate's automatic session context management --> 
     <property name="current_session_context_class">thread</property> 

     <!-- Disable the second-level cache --> 
     <property name="cache.provider_class"> 
      org.hibernate.cache.NoCacheProvider 
     </property> 

     <!-- Echo all executed SQL to stdout --> 
     <property name="show_sql">true</property> 

     <!-- Drop and re-create the database schema on startup --> 
     <property name="hbm2ddl.auto">update</property> 


    </session-factory> 

HibernateUtil класс

public class HibernateUtil { 
    private static final SessionFactory sessionFactory; 

    static { 
     try { 
      AnnotationConfiguration config = new AnnotationConfiguration(); 
     config.addAnnotatedClass(Login.class); 
     config.addAnnotatedClass(FilesInfo.class); 
     config.addAnnotatedClass(FilesShare.class); 

     config.configure("hibernate.cfg.xml"); 
    // new SchemaExport(config).create(true,true); 

     sessionFactory = config.buildSessionFactory(); 

     } catch (Throwable ex) { 
      // Log the exception. 
      System.err.println("Initial SessionFactory creation failed." + ex); 
      throw new ExceptionInInitializerError(ex); 
     } 
    } 

    public static SessionFactory getSessionFactory() { 
     return sessionFactory; 
    } 
} 

Спасибо!

+0

как вы установить соединение JDBC? Вы используете объединенное соединение или нет? отправьте конфигурацию datasource, пожалуйста, – WeMakeSoftware

+0

. О, извините, я добавил его, пожалуйста, посмотрите. :) – Aadam

+0

Вы также можете отправить код класса HibernateUtil? – fmodos

ответ

1

«Соединения» Переменная состояния просто относится к

Число попыток подключения (успешно или нет) к серверу MySQL,

, а не количество активных соединений. Вот ссылка: http://dev.mysql.com/doc/refman/5.1/en/server-status-variables.html#statvar_Connections

Чтобы получить количество открытых соединений, проверьте переменную «Threads_connected», документированы http://dev.mysql.com/doc/refman/5.1/en/server-status-variables.html#statvar_Threads_connected

+0

, как получить активное количество подключений, указать на это также, пожалуйста, – Aadam

+0

см. обновленный ответ. –

+0

Кстати, если вы используете c3po для объединения пулов, возможно, вы можете использовать [Настройщики подключения] (http://www.mchange.com/projects/c3p0/apidocs/com/mchange/v2/c3p0/ConnectionCustomizer.html) для отслеживания соединений из вашего кода; немного больше объяснений можно найти здесь (http://www.mchange.com/projects/c3p0/#connection_customizers) –

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