java数据库连接池都有哪些配置参数?都在这里了!

在工作中经常要和各种连接池组件打交道,各种参数眼花撩乱,再也不想因为连接池配置光顾度娘了。今天总结的主要是几大常用的数据库连接池配置,redis连接池准备ing。内容主要来自各官方文档。

image.png

Druid

官方文档: https://github.com/alibaba/dr...
  • 连接池类:com.alibaba.druid.pool.DruidDataSource
配置缺省值说明性能优化备注
namenull配置这个属性的意义在于,如果存在多个数据源,监控的时候可以通过名字来区分开来。如果没有配置,将会生成一个名字,格式是:"DataSource-" + System.identityHashCode(this). 另外配置此属性至少在1.0.5版本中是不起作用的,强行设置name会出错。详情-点此处。//
urlnull连接数据库的url,不同数据库不一样。例如: mysql : jdbc:mysql://10.20.153.104:3306/druid2 oracle : jdbc:oracle:thin:@10.20.149.85:1521:ocnauto//
usernamenull连接数据库的用户名//
passwordnull连接数据库的密码。如果你不希望密码直接写在配置文件中,可以使用ConfigFilter。详细看这里//
driverClassName根据url自动识别这一项可配可不配,如果不配置druid会根据url自动识别dbType,然后选择相应的driverClassName//
initialSize 初始化时建立物理连接的个数。初始化发生在显示调用init方法,或者第一次getConnection时可以配置和maxActive相同数量/
maxActive8最大连接池数量//
maxIdle8已经不再使用,配置了也没效果//
minIdlenull最小连接池数量建议配置和maxActive相同数量/
maxWaitnull获取连接时最大等待时间,单位毫秒。配置了maxWait之后,缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置useUnfairLock属性为true使用非公平锁。//
dataSouce.setUseUnfairLock(true)配置了maxWait之后,缺省启用公平锁,并发效率会有所下降//
poolPreparedStatementsfalse是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle。在mysql下建议关闭。oracle下可以配置/
maxPoolPreparedStatementPerConnectionSize-1要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true。在Druid中,不会存在Oracle下PSCache占用内存过多的问题,可以把这个数值配置大一些,比如说100oracle下可以配置/
validationQuerynull用来检测连接是否有效的sql,要求是一个查询语句,常用select 'x'。如果validationQuery为null,testOnBorrow、testOnReturn、testWhileIdle都不会起作用。//
validationQueryTimeoutnull单位:秒,检测连接是否有效的超时时间。底层调用jdbc Statement对象的void setQueryTimeout(int seconds)方法//
testOnBorrowtrue申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。不建议配置/
testOnReturnfalse归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。不建议配置/
testWhileIdlefalse建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。建议取代testOnBorrow和testOnReturn,其会影响获取db连接时的性能配合testWhileIdle=true 和timeBetweenEvictionRunsMillis来优化,无需在每次借用和归还连接时检测连接可用性,而是定期在连接空闲时进行检测,减少性能损耗
keepAlivefalse (1.0.28)连接池中的minIdle数量以内的连接,空闲时间超过minEvictableIdleTimeMillis,则会执行keepAlive操作。//
defualtAutoCommittrue事务自动提交
timeBetweenEvictionRunsMillis1分钟(1.0.14)有两个含义: 1) Destroy线程会检测连接的间隔时间,如果连接空闲时间大于等于minEvictableIdleTimeMillis则关闭物理连接。 2) testWhileIdle的判断依据,详细看testWhileIdle属性的说明//
numTestsPerEvictionRun30分钟(1.0.14)不再使用,一个DruidDataSource只支持一个EvictionRun//
minEvictableIdleTimeMillis连接保持空闲而不被驱逐的最小时间//
connectionInitSqls物理连接初始化的时候执行的sql//
exceptionSorter根据dbType自动识别当数据库抛出一些不可恢复的异常时,抛弃连接//
filtersnull属性类型是字符串,通过别名的方式配置扩展插件,常用的插件有: 监控统计用的filter:stat 日志用的filter:log4j 防御sql注入的filter:wall//
proxyFiltersnull类型是List<com.alibaba.druid.filter.Filter>,如果同时配置了filters和proxyFilters,是组合关系,并非替换关系//
removeAbandonedfalse配置removeAbandoned对性能会有一些影响,建议怀疑存在泄漏之后再打开。在上面的配置中,如果连接超过30分钟未关闭,就会被强行回收,并且日志记录连接申请时的调用堆栈/如果开启此配置,默认会打印堆栈信息,对性能影响较大。

Hikari

官方文档: https://github.com/brettwoold...
  • 连接池类:com.zaxxer.hikari.HikariDataSource
配置缺省值说明性能优化
autoCommittrue自动提交从池中返回的连接/
connectionTimeout30000ms等待来自池的连接的最大毫秒数/
idleTimeout600000ms连接允许在池中闲置的最长时间【一个连接idle状态的最大时长(毫秒),超时则被释放(retired),缺省:10分钟】/
maxLifetime1800000ms池中连接最长生命周期/
keepaliveTime0 (disabled)控制 HikariCP 尝试保持连接活动的频率,以防止它被数据库或网络基础设施超时。该值必须小于该 maxLifetime值。“keepalive”只会发生在空闲连接上。当针对给定连接进行“保持连接”的时间到了时,该连接将从池中删除、“ping”,然后返回到池中。'ping' 是其中之一:调用 JDBC4isValid()方法,或执行 connectionTestQuery. 通常,池外的持续时间应该以个位数毫秒甚至亚毫秒为单位进行测量,因此应该几乎没有或没有明显的性能影响。最小允许值为 30000 毫秒(30 秒), 默认值:0(禁用)/
connectionTestQuerynull如果您的驱动程序支持JDBC4,我们强烈建议您不要设置此属性建议不设置
minimumIdle10池中维护的最小空闲连接数【官方推荐不设置此值,默认同最大连接数相同】官方推荐不设置此值,默认同最大连接数相同
maximumPoolSize10池中最大连接数,包括闲置和使用中的连接/
metricRegistrynull该属性允许您指定一个 Codahale / Dropwizard MetricRegistry 的实例,供池使用以记录各种指标/
healthCheckRegistrynull该属性允许您指定池使用的Codahale / Dropwizard HealthCheckRegistry的实例来报告当前健康信息/
poolNameHikariPool-1连接池的用户定义名称,主要出现在日志记录和JMX管理控制台中以识别池和池配置/
initializationFailTimeout1如果池无法成功初始化连接,则此属性控制池是否将 fail fast/
isolateInternalQueriesfalse是否在其自己的事务中隔离内部池查询,例如连接活动测试/
allowPoolSuspensionfalse控制池是否可以通过JMX暂停和恢复/
readOnlyfalse从池中获取的连接是否默认处于只读模式/
registerMbeansfalse是否注册JMX管理Bean(MBeans)/
catalognull为支持 catalog 概念的数据库设置默认 catalog/
connectionInitSqlnull该属性设置一个SQL语句,在将每个新连接创建后,将其添加到池中之前执行该语句。/
driverClassNamenullHikariCP将尝试通过仅基于jdbcUrl的DriverManager解析驱动程序,但对于一些较旧的驱动程序,还必须指定driverClassName/
transactionIsolationnull控制从池返回的连接的默认事务隔离级别/
validationTimeout5000连接将被测试活动的最大时间量/
leakDetectionThreshold 记录消息之前连接可能离开池的时间量,表示可能的连接泄漏/
dataSourcenull这个属性允许你直接设置数据源的实例被池包装,而不是让HikariCP通过反射来构造它/
schemanull该属性为支持模式概念的数据库设置默认模式/
threadFactorynull此属性允许您设置将用于创建池使用的所有线程的java.util.concurrent.ThreadFactory的实例。/
scheduledExecutornull此属性允许您设置将用于各种内部计划任务的java.util.concurrent.ScheduledExecutorService实例/

DBCP

官方文档: https://commons.apache.org/pr...
  • 连接池类:org.apache.commons.dbcp2.BasicDataSource
配置缺省值说明性能优化备注
usernamenull传递给JDBC驱动的用于建立连接的用户名//
passwordnull传递给JDBC驱动的用于建立连接的密码//
urlnull传递给JDBC驱动的用于建立连接的URL//
driverClassNamenull使用的JDBC驱动的完整有效的java 类名//
connectionPropertiesnull当建立新连接时被发送给JDBC驱动的连接参数//
defaultAutoCommittrue连接池创建的连接的默认的auto-commit状态//
defaultReadOnlydriver default连接池创建的连接的默认的read-only状态. 如果没有设置则setReadOnly方法将不会被调用. (某些驱动不支持只读模式,比如:Informix)//
defaultCatalognull连接池创建的连接的默认的catalog//
defaultTransactionIsolationdriver default连接池创建的连接的默认的TransactionIsolation状态. 下面列表当中的某一个: (参考javadoc)//
initialSize0初始化连接:连接池启动时创建的初始化连接数量,1.2版本后支持//
maxActive8最大活动连接:连接池在同一时间能够分配的最大活动连接的数量, 如果设置为非正数则表示不限制//
maxIdle8最大空闲连接:连接池中容许保持空闲状态的最大连接数量,超过的空闲连接将被释放,如果设置为负数表示不限制//
minIdle0最小空闲连接:连接池中容许保持空闲状态的最小连接数量,低于这个数量将创建新的连接,如果设置为0则不创建//
maxWait无限最大等待时间:当没有可用连接时,连接池等待连接被归还的最大时间(以毫秒计数), 超过时间则抛出异常,如果设置为-1表示无限等待//
validationQuerynullSQL查询,用来验证从连接池取出的连接,在将连接返回给调用者之前.如果指定,则查询必须是一个SQL SELECT并且必须返回至少一行记录//
testOnBorrowtrue指明是否在从池中取出连接前进行检验,如果检验失败,则从池中去除连接并尝试取出另一个.注意: 设置为true后如果要生效,validationQuery参数必须设置为非空字符串//
testOnReturnfalse指明是否在归还到池中前进行检验注意: 设置为true后如果要生效,validationQuery参数必须设置为非空字符串//
testWhileIdlefalse指明连接是否被空闲连接回收器(如果有)进行检验.如果检测失败,则连接将被从池中去除.注意: 设置为true后如果要生效,validationQuery参数必须设置为非空字符串建议使用此设置,代替testOnBorrow/
timeBetweenEvictionRunsMillis-1在空闲连接回收器线程运行期间休眠的时间值,以毫秒为单位. 如果设置为非正数,则不运行空闲连接回收器线程//
numTestsPerEvictionRun3在每次空闲连接回收器线程(如果有)运行时检查的连接数量//
minEvictableIdleTimeMillis1000 60 30连接在池中保持空闲而不被空闲连接回收器线程(如果有)回收的最小时间值,单位毫秒//
poolPreparedStatementsfalse开启池的prepared statement 池功能,当开启时, 将为每个连接创建一个statement池,并且被下面方法创建的PreparedStatements将被缓存起来://
maxOpenPreparedStatements0statement池能够同时分配的打开的statements的最大数量, 如果设置为0表示不限制//
removeAbandonedfalse标记是否删除泄露的连接,如果他们超过了removeAbandonedTimout的限制.如果设置为true, 连接被认为是被泄露并且可以被删除,如果空闲时间超过removeAbandonedTimeout.设置为true可以为写法糟糕的没有关闭连接的程序修复数据库连接./如果开启”removeAbandoned”,那么连接在被认为泄露时可能被池回收. 这个机制在(getNumIdle() < 2) and (getNumActive() > getMaxActive() - 3)时被触发.举例当maxActive=20, 活动连接为18,空闲连接为1时可以触发”removeAbandoned”.但是活动连接只有在没有被使用的时间超过”removeAbandonedTimeout”时才被删除,默认300秒.
removeAbandonedTimeout300泄露的连接可以被删除的超时值, 单位秒//
logAbandonedfalse标记当Statement或连接被泄露时是否打印程序的stack traces日志。被泄露的Statements和连接的日志添加在每个连接打开或者生成新的Statement,因为需要生成stack trace。会导致线程爬栈/

C3P0

官方文档: https://www.mchange.com/proje...
  • 连接池类:com.mchange.v2.resourcepool.BasicResourcePool
配置缺省值说明性能优化
acquireIncrement3当连接池中的连接耗尽的时,c3p0一次同时创建的连接数/
acquireRetryAttempts30定义在从数据库获取新连接失败后重复尝试的次数/
acquireRetryDelay1000两次连接中间隔时间,单位毫秒/
autoCommitOnClosefalse连接关闭时默认将所有未提交的操作回滚/
automaticTestTablenullc3p0将建一张名为Test的空表,并使用其自带的查询语句进行测试。如果定义了这个参数那么属性preferredTestQuery将被忽略。你不能在这张Test表上进行任何操作,它将只供c3p0测试使用/
breakAfterAcquireFailurefalse获取连接失败将会引起所有等待连接池来获取连接的线程抛出异常。但是数据源仍有效保留,并在下次调用getConnection()的时候继续尝试获取连接。如果设为true,那么在尝试获取连接失败后该数据源将申明已断开并永久关闭/
checkoutTimeout0当连接池用完时客户端调用getConnection()后等待获取新连接的时间,超时后将抛出SQLException,如设为0则无限期等待/
connectionTesterClassNamecom.mchange.v2.c3p0.impl.DefaultConnectionTester通过实现ConnectionTester或QueryConnectionTester的类来测试连接。类名需制定全路径/
forceIgnoreUnresolvedTransactionsfalse如果您希望 c3p0 将事务管理留给您,并且既不提交也不回滚(也不修改 Connection autoCommit的状态),您可以将forceIgnoreUnresolvedTransactions设置为 true作者强烈建议不使用的一个属性
idleConnectionTestPeriod0每xxx秒检查所有连接池中的空闲连接/
initialPoolSize3初始化池的连接数,取值应在minPoolSize与maxPoolSize之间/
maxIdleTime0最大空闲时间,xxx秒内未使用则连接被丢弃。若为0则永不丢弃/
minPoolSize3连接池中保留的最小连接数/
maxPoolSize15连接池中保留的最大连接数/
maxStatements0JDBC的标准参数,用以控制数据源内加载的PreparedStatements数量。但由于预缓存的statements属于单个connection而不是整个连接池。所以设置这个参数需要考虑到多方面的因素。如果maxStatements与maxStatementsPerConnection均为0,则缓存被关闭/
maxStatementsPerConnection0maxStatementsPerConnection定义了连接池内单个连接所拥有的最大缓存statements数/
numHelperThreads3帮助配置数据源线程池的行为。默认情况下,每个数据源只有三个关联的辅助线程,负责诸如连接测试工作/
overrideDefaultUsernull当用户调用getConnection()时使root用户成为去获取连接的用户。主要用于连接池连接非c3p0的数据源时/
passwordnull密码/
usernull//
preferredTestQuerynull定义所有连接测试都执行的测试语句。在使用连接测试的情况下这个一显著提高测试速度。注意:测试的表必须在初始数据源的时候就存在/
testConnectionOnCheckoutfalse因性能消耗大请只在需要的时候使用它。如果设为true那么在每个connection提交的时候都将校验其有效性。建议使用idleConnectionTestPeriod或automaticTestTable等方法来提升连接测试的性能

Tomcat JDBC

官方文档: https://tomcat.apache.org/tom...
  • 连接池类:org.apache.tomcat.jdbc.pool.DataSource
配置缺省值说明性能优化
defaultAutoCommitnull(布尔值)连接池所创建的连接默认自动提交状态。如果未设置,则默认采用 JDBC 驱动的缺省值(如果未设置,则不会调用 setAutoCommit 方法)。
defaultReadOnlynull(布尔值)连接池所创建的连接默认只读状态。如果未设置,将不会调用 setReadOnly 方法。(有些驱动并不支持只读模式,比如:informix)
defaultTransactionIsolationnull(字符串)连接池所创建的连接的默认事务隔离状态。取值范围为:(参考 javadoc) NONE 、 READ_COMMITTED 、 READ_UNCOMMITTED 、 REPEATABLE_READ 、 SERIALIZABLE;如果未设置该值,则不会调用任何方法,默认为 JDBC 驱动。
defaultCatalog (字符串)连接池所创建的连接的默认catalog。
driverClassName (字符串)所要使用的 JDBC 驱动的完全限定的 Java 类名。该驱动必须能从与 tomcat-jdbc.jar 同样的类加载器访问
username (字符串)传入 JDBC 驱动以便建立连接的连接用户名。注意,DataSource.getConnection(username,password) 方法默认不会使用传入该方法内的凭证,但会使用这里的配置信息。可参看 alternateUsernameAllowed 了解更多详情。
password (字符串)传入 JDBC 驱动以便建立连接的连接密码。注意,DataSource.getConnection(username,password) 方法默认不会使用传入该方法内的凭证,但会使用这里的配置信息。可参看 alternateUsernameAllowed 了解更多详情。
maxActive100整形值)池同时能分配的活跃连接的最大数目。默认为 100。
maxIdle100(整型值)池始终都应保留的连接的最大数目。默认为 maxActive:100。会周期性检查空闲连接(如果启用该功能),留滞时间超过 minEvictableIdleTimeMillis 的空闲连接将会被释放。(请参考 testWhileIdle)
minIdle10(整型值)池始终都应保留的连接的最小数目。如果验证查询失败,则连接池会缩减该值。默认值取自 initialSize:10(请参考 testWhileIdle)。
initialSize10(整型值)连接器启动时创建的初始连接数。默认为 10。
maxWait30000(整型值)在抛出异常之前,连接池等待(没有可用连接时)返回连接的最长时间,以毫秒计。默认为 30000(30 秒)
testOnBorrowfalse(布尔值)默认值为 false。从池中借出对象之前,是否对其进行验证。如果对象验证失败,将其从池中清除,再接着去借下一个。注意:为了让 true 值生效,validationQuery 参数必须为非空字符串。为了实现更高效的验证,可以采用 validationInterval。
testOnReturnfalse(布尔值)默认值为 false。将对象返回池之前,是否对齐进行验证。注意:为了让 true 值生效,validationQuery 参数必须为非空字符串。
testWhileIdlefalse(布尔值)是否通过空闲对象清除者(如果存在的话)验证对象。如果对象验证失败,则将其从池中清除。注意:为了让 true 值生效,validationQuery 参数必须为非空字符串。该属性默认值为 false,为了运行池的清除/测试线程,必须设置该值。(另请参阅 timeBetweenEvictionRunsMillis)
validationQuerynull(字符串)在将池中连接返回给调用者之前,用于验证这些连接的 SQL 查询。如果指定该值,则该查询不必返回任何数据,只是不抛出 SQLException 异常。默认为 null。实例值为:SELECT 1(MySQL) select 1 from dual(Oracle) SELECT 1(MySQL Server)。
validationQueryTimeout-1(整型值)连接验证失败前的超时时间(以秒计)。通过在执行 validationQuery 的语句上调用 java.sql.Statement.setQueryTimeout(seconds) 来实现。池本身并不会让查询超时,完全是由 JDBC 来强制实现。若该值小于或等于 0,则禁用该功能。默认为 -1。
validatorClassNamenull(字符串)实现 org.apache.tomcat.jdbc.pool.Validator 接口并提供了一个无参(可能是隐式的)构造函数的类名。如果指定该值,将通过该类来创建一个 Validator 实例来验证连接,代替任何验证查询。默认为 null,范例值为:com.mycompany.project.SimpleValidator。
timeBetweenEvictionRunsMillis5000(整型值)空闲连接验证/清除线程运行之间的休眠时间(以毫秒计)。不能低于 1 秒。该值决定了我们检查空闲连接、废弃连接的频率,以及验证空闲连接的频率。默认为 5000(5 秒)
numTestsPerEvictionRun (整型值)Tomcat JDBC 连接池没有用到这个属性。
minEvictableIdleTimeMillis60000(整型值)在被确定应被清除之前,对象在池中保持空闲状态的最短时间(以毫秒计)。默认为 60000(60 秒)
accessToUnderlyingConnectionAllowed (布尔值)没有用到的属性。可以在归入池内的连接上调用 unwrap来访问。参阅 javax.sql.DataSource 接口的相关介绍,或者通过反射调用 getConnection,或者将对象映射为 javax.sql.PooledConnection。
removeAbandonedfalse(布尔值)该值为标志(Flag)值,表示如果连接时间超出了 removeAbandonedTimeout,则将清除废弃连接。如果该值被设置为 true,则如果连接时间大于 removeAbandonedTimeout,该连接会被认为是废弃连接,应予以清除。若应用关闭连接失败时,将该值设为 true 能够恢复该应用的数据库连接。另请参阅 logAbandoned。默认值为 false。
removeAbandonedTimeout60(整型值)在废弃连接(仍在使用)可以被清除之前的超时秒数。默认为 60(60 秒)。应把该值设定为应用可能具有的运行时间最长的查询。
logAbandonedfalse(布尔值)标志能够针对丢弃连接的应用代码,进行堆栈跟踪记录。由于生成堆栈跟踪,对废弃连接的日志记录会增加每一个借取连接的开销。默认为 false
connectionPropertiesnull(字符串)在建立新连接时,发送给 JDBC 驱动的连接属性。字符串格式必须为:[propertyName=property;]*。注意:user 与 password 属性会显式传入,因此这里并不需要包括它们。默认为 null。
poolPreparedStatements (布尔值)未使用的属性
maxOpenPreparedStatements (整型值)未使用的属性
initSQLnull字符串值。当连接第一次创建时,运行的自定义查询
jdbcInterceptors 字符串。继承自类 org.apache.tomcat.jdbc.pool.JdbcInterceptor 的子类类名列表,由分号分隔。这些拦截器将会插入到 java.sql.Connection 对象的操作队列中。 预定义的拦截器有:org.apache.tomcat.jdbc.pool.interceptor ConnectionState——记录自动提交、只读、catalog以及事务隔离级别等状态。org.apache.tomcat.jdbc.pool.interceptor,StatementFinalizer——记录打开的语句,并当连接返回池后关闭它们。有关更多预定义拦截器的详尽描述,可参阅JDBC 拦截器
validationInterval30000长整型值。为避免过度验证而设定的频率时间值(以秒计)。最多以这种频率运行验证。如果连接应该进行验证,但却没能在此间隔时间内得到验证,则会重新对其进行验证。默认为 30000(30 秒)
jmxEnabledtrue布尔值。是否利用 JMX 注册连接池
fairQueuetrue布尔值。假如想用真正的 FIFO 方式公平对待 getConnection 调用,则取值为 true。对空闲连接列表将采用 org.apache.tomcat.jdbc.pool.FairBlockingQueue 实现。默认值为 true。如果想使用异步连接获取功能,则必须使用该标志。设置该标志可保证线程能够按照连接抵达顺序来接收连接。在性能测试时,锁及锁等待的实现方式有很大差异。当 fairQueue=true 时,根据所运行的操作系统,存在一个决策过程。假如系统运行在 Linux 操作系统(属性 os.name = linux)上,为了禁止这个 Linux 专有行为,但仍想使用公平队列,那么只需在连接池类加载之前,将 org.apache.tomcat.jdbc.pool.FairBlockingQueue.ignoreOS=true 添加到系统属性上。
abandonWhenPercentageFull0整型值。除非使用中连接的数目超过 abandonWhenPercentageFull 中定义的百分比,否则不会关闭并报告已废弃的连接(因为超时)。取值范围为 0-100。默认值为 0,意味着只要达到 removeAbandonedTimeout,就应关闭连接。
maxAge0长整型值。连接保持时间(以毫秒计)。当连接要返回池中时,连接池会检查是否达到 now - time-when-connected > maxAge 的条件,如果条件达成,则关闭该连接,不再将其返回池中。默认值为 0,意味着连接将保持开放状态,在将连接返回池中时,不会执行任何年龄检查。
useEqualstrue布尔值。如果想让 ProxyConnection 类使用 String.equals,则将该值设为 true;若想在对比方法名称时使用 ==,则应将其设为 false。该属性不能用于任何已添加的拦截器中,因为那些拦截器都是分别配置的。默认值为 true。
suspectTimeout0整型值。超时时间(以秒计)。默认值为 0。类似于 removeAbandonedTimeout,但不会把连接当做废弃连接从而有可能关闭连接。如果 logAbandoned 设为 true,它只会记录下警告。如果该值小于或等于 0,则不会执行任何怀疑式检查。如果超时值大于 0,而连接还没有被废弃,或者废弃检查被禁用时,才会执行怀疑式检查。如果某个连接被怀疑到,则记录下 WARN 信息并发送一个 JMX 通知。
rollbackOnReturnfalse布尔值。如果 autoCommit==false,那么当连接返回池中时,池会在连接上调用回滚方法,从而终止事务。默认值为 false。
commitOnReturnfalse布尔值。如果 autoCommit==false,那么当连接返回池中时,池会在连接上调用提交方法,从而完成事务;如果 rollbackOnReturn==true,则忽略该属性。默认值为 false。
alternateUsernameAllowedfalse布尔值。出于性能考虑,JDBC 连接池默认会忽略 DataSource.getConnection(username,password)调用,只返回之前池化的具有全局配置属性 username 和 password的连接。但经过配置,连接池还可以允许使用不同的凭证来请求每一个连接。为了启用这项在DataSource.getConnection(username,password)调用中描述的功能,只需将 alternateUsernameAllowed 设为 true。如果你请求一个连接,凭证为 user 1/password 1,而连接之前使用的是 user 2/password 2 凭证,那么连接将被关闭,重新利用请求的凭证来开启。按照这种方式,池的容量始终以全局级别管理,而不是限于模式(schema)级别。默认值为 false。该属性作为一个改进方案,被添加到了 bug 50025 中。
dataSourcenull(javax.sql.DataSource)将数据源注入连接池,从而使池利用数据源来获取连接,而不是利用 java.sql.Driver 接口来建立连接。它非常适于使用数据源(而非连接字符串)来池化 XA 连接或者已建立的连接时。默认值为 null。
dataSourceJNDInull字符串。在 JNDI 中查找的数据源的 JNDI 名称,随后将用于建立数据库连接。参看 datasource 属性的介绍。默认值为 null。
useDisposableConnectionFacadetrue布尔值。如果希望在连接上放上一个门面对象,从而使连接在关闭后无法重用,则要将值设为 true。这能防止线程继续引用一个已被关闭的连接,并继续在连接上查询。默认值为 true。
logValidationErrorsfalse布尔值。设为 true 时,能将验证阶段的错误记录到日志文件中,错误会被记录为 SEVERE。考虑到了向后兼容性,默认值为 false。
propagateInterruptStatefalse布尔值。传播已中断的线程(还没有清除中断状态)的中断状态。考虑到了向后兼容性,默认值为 false。
ignoreExceptionOnPreLoadfalse布尔值。在初始化池时,是否忽略连接创建错误。取值为 true时表示忽略;设为 false 时,抛出异常,从而宣告池初始化失败。默认值为 false。

markdown编辑这么长的表格真心心累😟image.png

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数据库连接池是一种管理和复用数据库连接的技术,它可以减少每次请求时创建和释放数据库连接的开销,提高系统性能和资源利用率。下面是数据库连接池的工作原理: 1. 初始化连接池:在应用程序启动时,连接池会初始化一定数量的数据库连接,并将它们存储在连接池中。 2. 请求连接:当应用程序需要与数据库进行交互时,它从连接池中请求一个可用的数据库连接。 3. 处理事务:应用程序使用获取到的数据库连接执行数据库操作,包括查询、插入、更新等。 4. 释放连接:事务完成后,应用程序将数据库连接释放回连接池,而不是直接关闭它。 5. 连接重用:下一个请求到来时,应用程序可以再次从连接池获取可用的数据库连接,而不是重新创建连接。 常用的数据库连接池有以下几种: 1. Apache Commons DBCP:Apache Commons DBCP是一个开源的数据库连接池库,具有较高的性能和稳定性。 2. C3P0:C3P0是一个流行的Java数据库连接池库,支持JDBC 3.0和JDBC 4.0规范。 3. HikariCP:HikariCP是一个轻量级且高性能的数据库连接池,被认为是目前最快的Java连接池。 4. BoneCP:BoneCP是另一个高性能的数据库连接池,具有快速启动和低资源消耗的特点。 选择适合的数据库连接池取决于具体的应用程序需求和性能要求。需要注意的是,连接池的配置参数也很重要,如最大连接数、最小空闲连接数、连接超时时间等,需要根据实际情况进行调整和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值