2025年阿里阿里,阿里里,Druid 数据库连接池的简单使用。

阿里阿里,阿里里,Druid 数据库连接池的简单使用。最是乡愁 无处别离 思归 简单记录一下 Druid 数据库连接池的使用 不是前片一律的复制 亲身实验哦 不多 BI BI 先来看一下 Druid 的 maven 配置 https mvnrepositor com artifact com alibaba druid lt

大家好,我是讯享网,很高兴认识大家。

最是乡愁,无处别离,思归。

简单记录一下Druid 数据库连接池的使用,不是前片一律的复制,亲身实验哦。

不多BI BI,先来看一下Druid 的maven配置。

<!-- https://mvnrepository.com/artifact/com.alibaba/druid --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.9</version> </dependency>

讯享网

首先准备一个配置文件,jdbc.properties,文件内容如下

用druid 来管理phoenix 的jdbc 连接:


讯享网

讯享网 phoenix 连接池,phoenix连接信息 #phoenix url phoenix.jdbcUrl=jdbc:phoenix:host_replace:2181 #phoenix driver 名字 phoenix.driverClassName=org.apache.phoenix.jdbc.PhoenixDriver #当连接池启动时,初始化连接的个数,必须在minPoolSize~maxPoolSize之间,默认为3 phoenix.initialSize=25 #任何时间连接池中保存的最小连接数,默认3 phoenix.minIdle=5 #在任何时间连接池中所能拥有的最大连接数,默认15 phoenix.maxActive=30 #超过多长时间连接自动销毁,默认为0,即永远不会自动销毁,单位秒 phoenix.timeBetweenEvictionRunsMillis=60000 #获取连接的时候等待超时的时间 phoenix.maxWait=10000 #配置了maxWait之后,缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置useUnfairLock属性为true使用非公平锁 phoenix.useUnfairLock=true

然后,看具体的数据库连接池的可以设置的属性,仅供参考,一般只需要用到以上的jdbc.properties 中的一些属性

配置 缺省值 说明 name 配置这个属性的意义在于,如果存在多个数据源,监控的时候可以通过名字来区分开来。 如果没有配置,将会生成一个名字,格式是:"DataSource-" + System.identityHashCode(this) jdbcUrl 连接数据库的url,不同数据库不一样。例如: mysql : jdbc:mysql://10.20.153.104:3306/druid2 oracle : jdbc:oracle:thin:@10.20.149.85:1521:ocnauto username 连接数据库的用户名 password 连接数据库的密码。如果你不希望密码直接写在配置文件中,可以使用ConfigFilter。详细看这里:https://github.com/alibaba/druid/wiki/%E4%BD%BF%E7%94%A8ConfigFilter driverClassName 根据url自动识别,这一项可配可不配,如果不配置druid会根据url自动识别dbType,然后选择相应的driverClassName(建议配置下) initialSize 0 初始化时建立物理连接的个数。初始化发生在显示调用init方法,或者第一次getConnection时 maxActive 8 最大连接池数量 maxIdle 8 已经不再使用,配置了也没效果 minIdle 最小连接池数量 maxWait 获取连接时最大等待时间,单位毫秒。配置了maxWait之后,缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置useUnfairLock属性为true使用非公平锁。 poolPreparedStatements false 是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle。在mysql下建议关闭。 maxOpenPreparedStatements -1 要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true。在Druid中,不会存在Oracle下PSCache占用内存过多的问题,可以把这个数值配置大一些,比如说100 validationQuery 用来检测连接是否有效的sql,要求是一个查询语句。如果validationQuery为null,testOnBorrow、testOnReturn、testWhileIdle都不会其作用。 testOnBorrow true 申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。 testOnReturn false 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能 testWhileIdle false 建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。 timeBetweenEvictionRunsMillis 有两个含义: 1) Destroy线程会检测连接的间隔时间2) testWhileIdle的判断依据,详细看testWhileIdle属性的说明 numTestsPerEvictionRun 不再使用,一个DruidDataSource只支持一个EvictionRun minEvictableIdleTimeMillis connectionInitSqls 物理连接初始化的时候执行的sql exceptionSorter 根据dbType自动识别,当数据库抛出一些不可恢复的异常时,抛弃连接 filters 属性类型是字符串,通过别名的方式配置扩展插件,常用的插件有: 监控统计用的filter:stat日志用的filter:log4j防御sql注入的filter:wall proxyFilters 类型是List<com.alibaba.druid.filter.Filter>,如果同时配置了filters和proxyFilters,是组合关系,并非替换关系

最后,别biu biu 了,上代码。

讯享网package com.hzgc.service.staticrepo; import com.alibaba.druid.pool.DruidDataSource; import com.hzgc.util.common.FileUtil; import org.apache.log4j.Logger; import org.datanucleus.store.rdbms.identifier.IdentifierFactory; import java.beans.PropertyVetoException; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.sql.*; import java.util.Properties; public class PhoenixJDBCHelper { private Logger LOG = Logger.getLogger(PhoenixJDBCHelper.class); private static volatile PhoenixJDBCHelper instance; // druid 数据库连接池 private volatile static DruidDataSource druidDataSource; private PhoenixJDBCHelper() { if (druidDataSource == null) { initDruidDataSource(); } } public DruidDataSource getDruidDataSource() { return PhoenixJDBCHelper.druidDataSource; } public static PhoenixJDBCHelper getInstance() { if (instance == null) { synchronized (PhoenixJDBCHelper.class) { instance = new PhoenixJDBCHelper(); } } return instance; } private static void initDruidDataSource() { File file = FileUtil.loadResourceFile("jdbc.properties"); Properties jdbcProp = new Properties(); try { jdbcProp.load(new FileInputStream(file)); } catch (IOException e) { e.printStackTrace(); } // phoenix url String jdbcUrl = jdbcProp.getProperty("phoenix.jdbcUrl"); // phoenix driver 名字 String driverClassName = jdbcProp.getProperty("phoenix.driverClassName"); // 当连接池启动时,初始化连接的个数,minIdle~maxActive,默认为3 String initialSize = jdbcProp.getProperty("phoenix.initialSize"); // 任何时间连接池中保存的最小连接数,默认3 String minIdle = jdbcProp.getProperty("phoenix.minIdle"); // 在任何时间连接池中所能拥有的最大连接数,默认15 String maxActive = jdbcProp.getProperty("phoenix.maxActive"); // 超过多长时间连接自动销毁,默认为0,即永远不会自动销毁 String timeBetweenEvictionRunsMillis = jdbcProp.getProperty("phoenix.timeBetweenEvictionRunsMillis"); // 获取连接等待超时的时间 String maxWait = jdbcProp.getProperty("phoenix.maxWait"); // 配置了maxWait之后,缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置useUnfairLock属性为true使用非公平锁 String useUnfairLock = jdbcProp.getProperty("phoenix.useUnfairLock"); druidDataSource = new DruidDataSource(); if (jdbcUrl == null || driverClassName == null) { return; } druidDataSource.setUrl(jdbcUrl); druidDataSource.setDriverClassName(driverClassName); if (minIdle != null) { druidDataSource.setMinIdle(Integer.parseInt(minIdle)); } if (initialSize != null) { druidDataSource.setInitialSize(Integer.parseInt(initialSize)); } if (maxActive != null) { druidDataSource.setMaxActive(Integer.parseInt(maxActive)); } if (maxWait != null) { druidDataSource.setMaxWait(Long.parseLong(maxWait)); } if (timeBetweenEvictionRunsMillis != null) { druidDataSource.setTimeBetweenConnectErrorMillis(Long.parseLong(timeBetweenEvictionRunsMillis)); } if (useUnfairLock != null) { druidDataSource.setUseUnfairLock(Boolean.parseBoolean(useUnfairLock)); } } public static void closeConnection(Connection conn, Statement pstm) { closeConnection(conn, pstm, null); } public static void closeConnection(Connection conn, Statement pstm, ResultSet resultSet) { try { if (resultSet != null) { resultSet.close(); } } catch (SQLException e) { e.printStackTrace(); } finally { try { if (pstm != null) { pstm.close(); } } catch (SQLException e) { e.printStackTrace(); } finally { try { if (conn != null) { conn.close(); } } catch (SQLException e) { e.printStackTrace(); } } } } }

O了,一个Druid 的数据库连接池就这样简单的应用了,调优的事情,自己慢慢捣鼓去吧。关于Spring 配置的使用,本人搞大数据的,暂时也用不到,biubiubiu,就略过了。

小讯
上一篇 2025-01-25 17:07
下一篇 2025-04-08 15:10

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/16514.html