是的,我在Google App Engine上實現了HikariCP,但有一些注意事項;
Google App Engine使用three types and instance classes;
只有基本型和手動縮放允許後臺線程,因此與HikariCP使用的唯一候選人。 我已經使用Basic Scaling,對於大致已知的用戶羣(例如每個部署實例有一個公司)沒有問題。這種類型支持一些其他很好的功能,如會話支持和功能強大的B8實例(1024 MB/4.8 GHz)。 對於我的大多數應用程序,我更喜歡在多個實例之上的一個強大的初始化實例。
屬性線程工廠只可用via programmatic configuration,所以我實現了我自己的連接提供程序;
public class MyConnectionProvider implements ConnectionProvider, Configurable, Stoppable
{
...
public void configure(Map props) throws HibernateException
{
try
{
mHikariConfig = HikariConfigurationUtil.loadConfiguration(props);
if (SystemProperty.environment.value() == SystemProperty.Environment.Value.Production)
{
mHikariConfig.setDriverClassName("com.mysql.jdbc.GoogleDriver");
mHikariConfig.setJdbcUrl("jdbc:google:mysql://project-xxx:database/xxx");
mHikariConfig.setThreadFactory(ThreadManager.backgroundThreadFactory());
}
else
{
mHikariConfig.setDriverClassName("com.mysql.jdbc.Driver");
mHikariConfig.setJdbcUrl("jdbc:mysql://localhost:3306/xxx");
}
mHikariConfig.addDataSourceProperty("databaseName", "xxx");
mHikariConfig.setUsername("USERNAME");
mHikariConfig.setPassword("PASSWD");
mHikariConfig.setRegisterMbeans(false);
mHikariConfig.setMaximumPoolSize(12);
mHikariConfig.addDataSourceProperty("cachePrepStmts", "true");
mHikariConfig.addDataSourceProperty("useServerPrepStmts", "true");
mHikariConfig.addDataSourceProperty("prepStmtCacheSize", "250");
mHikariConfig.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");
mHikariDataSource = new HikariDataSource(mHikariConfig);
}
catch (Exception e)
{
throw new HibernateException(e);
}
}
...
}
數據庫名稱已經在JdbcUrl中,但我不得不再次指定它。 另一個重要配置設置是
mHikariConfig.setRegisterMbeans(false);
此禁用在App Engine上的限制Java管理擴展。