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");
properties.put("hibernate.hbm2ddl.auto", "");
properties.put("hibernate.show_sql", false);
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.