Hibernate Connection Pool Provider for Cloud SQL

I use Hibernate in conjunction with GAE and Cloud SQL.

Everything works fine, but when the instance wakes up, sometimes it takes a long time to connect to the database (up to 15 seconds).

In the log, I see that in most cases, Hibernate establishes a connection:

   I 17:46:35.936 org.hibernate.cfg.Configuration doConfigure: HHH000041: Configured SessionFactory: null
   W 17:46:36.209 org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure: HHH000402: Using Hibernate built-in connection pool (not for production use!)
   I 17:46:36.243 org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure: HHH000115: Hibernate connection pool size: 0
   I 17:46:36.244 org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure: HHH000006: Autocommit mode: false
   I 17:46:36.244 org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure: HHH000401: using driver [com.mysql.jdbc.GoogleDriver] at URL [jdbc:google:mysql://database?user=someUser]
   I 17:46:36.245 org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure: HHH000046: Connection properties: {}
   I 17:46:45.356 org.hibernate.dialect.Dialect <init>: HHH000400: Using dialect: org.hibernate.dialect.MySQL5InnoDBDialect

Here is the code that creates this:

properties.put("hibernate.connection.driver_class", "com.mysql.jdbc.GoogleDriver");
properties.put("hibernate.connection.url", "jdbc:google:mysql://" + SQL_INSTANCE + "/" + DATABASE + "?user=someUser");

// disable schema check
properties.put("hibernate.hbm2ddl.auto", ""); // disable
properties.put("hibernate.show_sql", false);            

// single session per request/thread
properties.put("hibernate.connection.pool_size", 0);
properties.put("hibernate.current_session_context_class", "thread");

Configuration cfg = new Configuration();
cfg.configure("/META-INF/hibernate.cfg.xml");
cfg.addProperties(properties);

sessionFactory = cfg.buildSessionFactory(new ServiceRegistryBuilder().applySettings(cfg.getProperties()).buildServiceRegistry());

The following method provides a session

public Session getSession() {

        Session session;
        try {
            session = sessionFactory.getCurrentSession();
        }
        catch (org.hibernate.HibernateException he) {
            log.info("Opening new hibernate session.");
            session = sessionFactory.openSession();
        }

        return session;
    }

I set the connection pool size to 0 (as recommended), but apparently uses Hibernates in the connection pool manager.

My question is: which pool manager should be used in this setting, and what else can be done to speed up the connection time.

What are the best tuning methods of this type as I cannot find anything but some simple examples.

+4
2

HikariCP, CP .

GitHub, Hibernate. DBCP, DataSource HikariDataSource one.

Hibernate API SPring, HikariDataSource Hibernate:

@Override
protected SessionFactory newSessionFactory() {
    Properties properties = new Properties();
    ...
    //data source settings
    properties.put("hibernate.connection.datasource", hikariDataSource);
    return new Configuration()
    .addProperties(properties)
    .addAnnotatedClass(SecurityId.class)
    .buildSessionFactory(
            new StandardServiceRegistryBuilder()
            .applySettings(properties)
    .build()
);
+1

An ON_DEMAND SQL . , , .

, , . , . , "", , , .

SQL.

0

All Articles