当前位置: 首页 > 面试题库 >

我可以在Google App Engine上使用HikariCP吗

龙昊焱
2023-03-14
问题内容

借助Cloud SQL,在App
Engine上寻找连接池解决方案时,会出现多个条目,并提出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一起使用的唯一候选者。我使用了基本扩展,这对于大约已知的用户群(例如,每个部署的实例一个公司)来说是没有问题的。此类型启用其他一些不错的功能,例如会话支持和功能强大的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);

这会禁用on App Engine的受限Java管理扩展。



 类似资料:
  • 根据Mozilla的说法,iOS上没有任何浏览器支持跨源开放策略,这是启用ShareDarrayBuffer的安全要求之一。这是否意味着我不能将SharedArrayBuffer用于iOS平台上的任何Web应用程序?

  • 项目的数据库连接我是用HikariCP,单个增删查改速度是还算快的。但请求一多,速度就变得很慢很慢了。请问这个可以怎么优化? 然后我是这么配置的

  • 我需要在macOS上运行旧版本的JDK 7。 我看过“如何在Mac OSX上使用JDK 7?”在“JavaVirtualMachine”中:如何在Mac OSX上使用JDK 7? 还查看了:“OpenJDK”:https://openjdk.java.net/ 知道在哪里可以找到macOS的JDK 7吗?

  • 问题内容: 我正在使用Spring 3.0.x,并按照枚举单例模式进行实现。 最近,我们开始通过Spring收集这些类型,因此我需要在类中添加@Component。 收集方法是 完成此操作后,我观察到失败,原因是Spring无法初始化枚举类(这是可以理解的)。 我的问题是- 是否有其他方法可以将枚举类标记为bean? 还是我需要更改实施方式? 问题答案: 如果确实需要使用基于枚举的单例(尽管默认情

  • 问题内容: 要在iPhone上通过HTML拨打电话,我创建了一个标签,其标签的href格式为:。 Android上有与HTML相当的东西吗? 澄清-使用格式href =’tele:123-555-1212’确实适用于android。我正在设备上的本机Java包装中测试该应用程序。它似乎好像不能从本地包装器中托管的Web应用程序进行呼叫。 问题答案: 是的你可以;它也适用于Android: tel:

  • 问题内容: 我想将通用映射分组到中,但不能使用,因为我的实体已经扩展了另一个。所以我需要一个类似下面的界面: 我想像下面这样使用它: 我的意思是说这项工作可行吗? 我可以在接口上使用@MappedSuperclass注释吗? Hibernate是否支持接口? 问题答案: 号如前所述这里: JPA不直接支持接口或变量关系。