簡體   English   中英

我可以在Google App Engine上使用HikariCP嗎?

[英]Can i use HikariCP on Google App Engine

在App Engine上尋找連接池解決方案,使用Cloud SQL,多個條目顯示HikariCP應該工作的建議,因為它允許外部ThreadFactory配置。 例如;

配置將是這樣的:

import com.google.appengine.api.ThreadManager;

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

但是有問題;

Google App Engine上的HikariCP

實際上,由於App Engine受限制的“沙盒”環境,快速嘗試暴露了多個問題。

所以問題仍然存在; 有人在Google App Engine上成功實施了HikariCP嗎?

是的,我已經在Google App Engine上實施了HikariCP,但有一些注意事項;

Google App Engine使用三種類型和實例類 ;

  • 自動縮放
  • 基本縮放
  • 手動縮放

只有基本和手動縮放類型允許后台線程,因此是與HikariCP一起使用的唯一候選者。 我已經使用了Basic Sc​​aling,這對於大致已知的用戶群來說沒有問題(例如,每個已部署的實例都有一家公司)。 此類型還支持其他一些不錯的功能,如會話支持和功能強大的B8實例(1024 MB / 4.8 GHz)。 對於我的大多數應用程序,我更喜歡在多個實例之上的一個功能強大

屬性threadFactory只能通過編程配置獲得 ,所以我實現了自己的連接提供程序;

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管理擴展。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM