程序问答   发布时间:2022-05-31  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Springboot 和 Quartz Scheduler 是否使用相同的 HikariCP?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决Springboot 和 Quartz scheduler 是否使用相同的 HikariCP??

开发过程中遇到Springboot 和 Quartz scheduler 是否使用相同的 HikariCP?的问题如何解决?下面主要结合日常开发的经验,给出你关于Springboot 和 Quartz scheduler 是否使用相同的 HikariCP?的解决方法建议,希望对你解决Springboot 和 Quartz scheduler 是否使用相同的 HikariCP?有所启发或帮助;

我有一个关于 springboot、quartz 调度器和 HikariCP 的问题。我对这个领域比较陌生,并试图了解关系和工作。 我已经解决了许多与使用 HikariCP 的 Springboot HikariCP 或 Quartz 调度程序相关的问题,但没有一个能够回答我的问题。

我有一个具有以下配置的应用程序

#Database propertIEs

spring.datasource.url = jdbc:MysqL://localhost:3306/demo?user=root&password=root&useSSL=false&serverTimezone=UTC
spring.datasource.username = root
spring.datasource.password = root
spring.jpa.propertIEs.hibernate.dialect = org.hibernate.dialect.MysqL5InnoDBDialect

#Hikari

spring.datasource.hikari.minimumIDle=5
spring.datasource.hikari.maximumPoolSize=20

#quartz setTings

spring.quartz.propertIEs.org.quartz.jobStore.datasource = quartzDatasource
spring.quartz.propertIEs.org.quartz.datasource.quartzDatasource.driver = com.Mysql.cj.jdbc.Driver
spring.quartz.propertIEs.org.quartz.datasource.quartzDatasource.provIDer=hikaricp
spring.quartz.propertIEs.org.quartz.datasource.quartzDatasource.URL = jdbc:MysqL://localhost:3306/demo?user=root&password=root&useSSL=false&serverTimezone=UTC
spring.quartz.propertIEs.org.quartz.datasource.quartzDatasource.user = root
spring.quartz.propertIEs.org.quartz.datasource.quartzDatasource.password = root
spring.quartz.job-store-type = jdbc
spring.quartz.propertIEs.org.quartz.threadPool.thReadCount=20

默认情况下,springboot2 使用 HikariCP。我已将池大小设置为 20。 在石英调度程序中,我也将其设置为使用 HikariCP。 现在我的问题是

  1. springboot 和quartz 使用同一个连接池还是quartz 创建一个新的连接池?
  2. 如果quartz 正在创建一个新池,有没有什么办法可以配置两者,使两者都使用springboot 创建的相同连接池。
  3. 对于 1k、10k、50k 用户来说,最佳连接池应该是什么?

提前致谢。

解决方法

抱歉,没有足够的时间回复完整的答案,但也许这会有所帮助:

  1. 您在 2 个不同的地方提供了连接详细信息,可以假设您正在使用不同的池创建 2 个数据源。
  2. 发现这个:https://www.candidjava.com/tutorial/quartz-reuse-exisTing-data-source-connection-pool/
  3. 用户数量不能与连接池大小直接相关。您应该查看您想要支持的并发请求数:对于 100 req/sec,每个 req 需要 100 ms -> 您需要 10 个连接。这是一种非常简化的计算方式,但它是一个起点,之后:监控和调整应该对您有所帮助。
,

在 Quartz 中重用 Spring 的数据源是可能的,并且自 Spring 框架 4.x 以来一直如此。

默认情况下,Quartz 根据提供的数据源属性创建一个新的连接池。 即使你指示 Quartz 使用连接池提供者(因为它支持 c3p0 和 HikariCP 开箱即用),它仍然会使用提供者创建一个新的连接池。这一切都归结为 Quartz 的 JobStoreCMT 类的实现细节,它通常是 Spring 应用程序中默认使用的 JobStore 实现。 JobStoreCMT 将始终创建自己的池。

在 Quartz 中重用 Spring 的数据源非常简单,在 Spring 中使用 schedulerFactoryBean。它通过 setDatasource 接受 Spring 管理的数据源,如下面的代码片段

@Configuration
public class schedulerConfig {

    @Autowired private Datasource datasource;

    @Bean
    public schedulerFactoryBean schedulerFactoryBean(){
        schedulerFactoryBean factory = new schedulerFactoryBean();
        factory.setDatasource(datasourcE);
        // ... set other properties
        return factory;
    }
   

在内部,当数据源提供给 schedulerFactoryBean 时,Spring Framework 指示 Quartz 使用 LocalDatasourceJobStore(Spring 提供的作业存储,扩展 Quartz 的 JobStoreCMT)来管理作业。 LocalDatasourceJobStore 有一个自定义 Quartz 连接提供程序,它重用提供的数据源,而不是创建新连接。

在 Spring Boot 2 中,这更简单,因为它使用应用程序的默认数据源进行所有自动装配。一个只需要配置 Quartz 使用 JDBC 存储类型:

spring.quartz.job-store-type=jdbc

在属性文件中将 Quartz 配置为再次使用数据源,可能会干扰这种自动装配行为,并导致使用新的连接池创建 Quartz 管理的数据源。

大佬总结

以上是大佬教程为你收集整理的Springboot 和 Quartz Scheduler 是否使用相同的 HikariCP?全部内容,希望文章能够帮你解决Springboot 和 Quartz Scheduler 是否使用相同的 HikariCP?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: