2016-07-15 3 views
3

Cloud Engineを使用しているApp Engine上の接続プールソリューションを見てみると、HikariCPが外部ThreadFactory設定を可能にするため、複数のエントリが表示されます。例えば;Google App EngineでHikariCPを使用できますか

構成はこのようなものになるだろう:

import com.google.appengine.api.ThreadManager; 

... 
HikariConfig lConfig = new HikariConfig(); 
config.setThreadFactory(ThreadManager.backgroundThreadFactory()); 
... 

しかし、問題があります。

HikariCP on Google App Engine

そして実際、迅速な試みは、App Engineの制限付きの「サンドボックス」環境のために複数の問題を露呈しました。

質問が残っています。 誰かがGoogle App EngineでHikariCPを正常に実装しましたか?

答えて

3

はい私はGoogle App EngineでHikariCPを実装しましたが、いくつかの考慮事項があります。

Google App Engineはthree types and instance classesを使用します。

  • 自動スケーリング
  • 基本マニュアルスケーリング
  • 基本と手動スケーリングがバックグラウンドスレッドを許可するため、HikariCPで使用するための唯一の候補であるだけのタイプ

スケーリング。 私は基本的スケーリングを使用しましたが、これはおおまかに知られているユーザーベースでは問題ありません(たとえば、デプロイされたインスタンスごとに1つの会社)。このタイプでは、セッションサポートや強力なB8インスタンス(1024 MB/4.8 GHz)など、いくつかの優れた機能が有効になります。 私のアプリケーションのほとんどは、複数のインスタンスの上に1つの強力な初期化されたインスタンスを優先します。

プロパティthreadFactoryvia 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); 

です。

関連する問題