【问题标题】:Which connection pool implementation has the behaviour that i want?哪个连接池实现具有我想要的行为?
【发布时间】:2020-08-13 15:04:36
【问题描述】:

所以我正在运行一个用于查询 MySQL 数据库的 Spring Boot 服务器。到目前为止,我一直在使用自动配置的 HikariCP 连接池和 JOOQ,所以我几乎与连接池无关。但是现在我需要查询两个不同的模式(在同一台服务器上),而且我似乎无法自动配置两个连接池,所以我必须自己修改DataSource。我想保留连接的本机行为,即拥有一组持久连接,以便服务器可以分派查询,一旦查询得到解决,连接仍然存在并且可以再次免费使用。我发现连接池的多种实现允许有多个DataSource 来查询多个服务器,但我不知道它们中的每一个是否都在使用我刚才描述的行为。

实施#1: https://www.ru-rocker.com/2018/01/28/configure-multiple-data-source-spring-boot/

实施#2: https://www.stubbornjava.com/posts/database-connection-pooling-in-java-with-hikaricp

我觉得#2 是最直接的解决方案,但我对每次我想查询时创建一个新的DataSource 的想法持怀疑态度。如果我不关闭它,我是否只是一遍又一遍地打开连接?所以很明显,一旦完成,我将不得不关闭它们,但它不再是真正的连接池了。 (还是我误会了?)

同时#1 似乎更可靠,但我每次都会打电话给new HikariDataSource,所以这就是我要找的吗?

(或者我错过了一个更简单的解决方案,因为我需要查询两个不同的模式但仍然在同一个服务器和方言上)

【问题讨论】:

    标签: spring-boot datasource connection-pooling hikaricp


    【解决方案1】:

    好的,事实证明我不必设置多个连接。当我使用相同的凭据查询同一台服务器时,我不必为每个 shema 设置连接。我刚刚删除了我在 jdbc url 配置中指定的架构:

    spring.datasource.url=jdbc:mysql://localhost:5656/db_name?useUnicode=true&serverTimezone=UTC
    

    变成

    spring.datasource.url=jdbc:mysql://localhost:5656/?useUnicode=true&serverTimezone=UTC
    

    然后,由于我已经使用 JOOQ 生成器生成了 POJO,因此我可以从模式对象中引用我的表,即:Client.CLIENT.ID.as("idClient") 变为 ClientSchema.CLIENTSCHEMA.CLIENT.ID.as("idClient")。这样我就可以查询多个模式,而无需设置任何新的附加连接。

    如何配置 MAVEN 和 JOOQ 以从多个模式生成源:

    https://www.jooq.org/doc/3.13/manual/code-generation/codegen-advanced/codegen-config-database/codegen-database-catalog-and-schema-mapping/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-26
      相关资源
      最近更新 更多