Java 我可以在谷歌应用程序引擎上使用HikariCP吗

Java 我可以在谷歌应用程序引擎上使用HikariCP吗,java,google-app-engine,google-cloud-sql,hikaricp,Java,Google App Engine,Google Cloud Sql,Hikaricp,在AppEngine上寻找连接池解决方案,使用云SQL,会出现多个条目,建议HikariCP应该可以工作,因为它允许外部ThreadFactory配置。比如, 配置如下所示: import com.google.appengine.api.ThreadManager; ... HikariConfig lConfig = new HikariConfig(); config.setThreadFactory(ThreadManager.backgroundThreadFactory()

在AppEngine上寻找连接池解决方案,使用云SQL,会出现多个条目,建议HikariCP应该可以工作,因为它允许外部ThreadFactory配置。比如,

配置如下所示:

import com.google.appengine.api.ThreadManager;

...
HikariConfig lConfig = new HikariConfig();
config.setThreadFactory(ThreadManager.backgroundThreadFactory());
...
但也有问题,

事实上,一次快速的尝试暴露了应用程序引擎受限的“沙盒”环境带来的多个问题


所以问题依然存在;有人在Google App Engine上成功实现了HikariCP吗?

是的,我已经在Google App Engine上实现了HikariCP,但是有一些考虑因素

谷歌应用引擎使用

  • 自动缩放
  • 基本比例
  • 手动缩放
只有“基本”和“手动缩放”类型才允许使用背景线程,因此,它们是唯一可用于HikariCP的候选类型。 我使用了基本的扩展,这对于一个大致已知的用户群(例如,每个部署的实例对应一个公司)来说是没有问题的。这种类型支持其他一些不错的特性,比如会话支持和强大的B8实例(1024MB/4.8GHz)。 对于我的大多数应用程序,我更喜欢一个强大的初始化实例而不是多个实例

属性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);

这将禁用应用程序引擎上的受限java管理扩展。

之后,如何使用此ConnectionProvider而不是HikariConnectionProvider?你能给我完整的相关代码吗?只需在persistence.xml配置()中指定它我正在使用Springboot 2.0如何应用它?因为找不到persistence.xml。实际上,如果我不使用ThreadManager(保留默认值)。这也是工作。但30分钟后(随机)。它出错了。所以我不知道为什么会出现错误。因为ThreadManager或其他原因。请查看depsypher的关于Springboot的回答,这是基本知识,只需查看文档即可。