はい私はGoogle App EngineでHikariCPを実装しましたが、いくつかの考慮事項があります。
Google App Engineはthree types and instance classesを使用します。
- 自動スケーリング
- 基本マニュアルスケーリング
- 基本と手動スケーリングがバックグラウンドスレッドを許可するため、HikariCPで使用するための唯一の候補であるだけのタイプ
スケーリング。 私は基本的スケーリングを使用しましたが、これはおおまかに知られているユーザーベースでは問題ありません(たとえば、デプロイされたインスタンスごとに1つの会社)。このタイプでは、セッションサポートや強力なB8インスタンス(1024 MB/4.8 GHz)など、いくつかの優れた機能が有効になります。 私のアプリケーションのほとんどは、複数のインスタンスの上に1つの強力な初期化されたインスタンスを優先します。
プロパティthreadFactoryは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にありますが、もう一度指定する必要があります。 もう一つの重要な構成設定が、これはApp Engineの制限されたJavaの管理の拡張機能に無効にします
mHikariConfig.setRegisterMbeans(false);
です。