Quartz默认是使用C3p0作为连接池。C3p0现在比较老,性能也不佳。很多公司都是使用阿里的Druid,网上有相关的配置教程。
我们使用Springboot自带的连接池Hikaricp。看了Quartz源码发现 接口PoolingConnectionProvider下面有 HikariCpPoolingConnectionProvider 和 C3p0PoolingConnectionProvider。
既然有HikariCp连接池,就直接用呗。但是在网上找了一圈,没有相应的解决办法,只能自己跟源码了。
从PoolingConnectionProvider中找到了hikariCp,跟进去看看。看到没有,条件判断选择一个连接池hikariCp或C3p0。再跟下去看看。
跟着poolingProvider跳到了属性获取这一步。POOLING_PROVIDER 这个好眼熟,点进去一看 就是最上面的
String POOLING_PROVIDER = "provider";
再看一下这个 pp 是什么。原来是PropertiesParser 属性解析器。再进一步看看这个属性的前缀 PROP_DATASOURCE_PREFIX 发现:
public static final String PROP_DATASOURCE_PREFIX = "org.quartz.dataSource";
这下一下子就豁然开朗了。配置过 quartz.properties的同学对这个前缀肯定不会陌生。
谜底揭晓,把前面串起来,使用配置如下
org.quartz.dataSource.qzDS.provider=hikaricp
重启试一下。。。重启成功,使用的连接池 正是 HikariCp。大功告成!