c3p0 is very tunable, and offers
a somewhat bewildering array of configuration parameters.
initialPoolSize C3P0
default: 3
minPoolSize Must be
set in hibernate.cfg.xml (or hibernate.properties), Hibernate default: 1
maxPoolSize Must be
set in hibernate.cfg.xml (or hibernate.properties), Hibernate default: 100
idleTestPeriod Must be
set in hibernate.cfg.xml (or hibernate.properties), Hibernate default: 0
If this is a number greater than
0, c3p0 will test all idle, pooled but unchecked-out connections, every this
number of seconds.
timeout Must be
set in hibernate.cfg.xml (or hibernate.properties), Hibernate default: 0
The seconds a Connection can
remain pooled but unused before being discarded. Zero means idle connections
never expire.
maxStatements Must be
set in hibernate.cfg.xml (or hibernate.properties), Hibernate default: 0
The size of c3p0's
PreparedStatement cache. Zero means statement caching is turned off.
unreturnedConnectionTimeout=3600 default(0) I’ve
set this to 1 hour. If a Connection is used for longer than an hour, then C3P0
will assume it’s been orphaned and will reclaim the Connection to the pool –
closing it in the process.
propertyCycle Must be
set in c3p0.properties, C3P0 default: 300
Maximum time in seconds before
user configuration constraints are enforced. c3p0 enforces configuration
constraints continually, and ignores this parameter. It is included for JDBC3
completeness.
acquireIncrement Must be
set in hibernate.cfg.xml (or hibernate.properties), Hibernate default: 1
Determines how many connections
at a time c3p0 will try to acquire when the pool is exhausted.
testConnectionOnCheckout Must be
set in c3p0.properties, C3P0 default: false
Don't use it, this feature is
very expensive. If set to true, an operation will be performed at every
connection checkout to verify that the connection is valid. A better choice is
to verify connections periodically using c3p0.idleConnectionTestPeriod.
autoCommitOnClose Must be
set in c3p0.properties, C3P0 default: false
The JDBC spec is unfortunately
silent on what should happen to unresolved, pending transactions on Connection
close. C3P0's default policy is to rollback any uncommitted, pending work. (I
think this is absolutely, undeniably the right policy, but there is no
consensus among JDBC driver vendors.) Setting autoCommitOnClose to true causes
uncommitted pending work to be committed, rather than rolled back on Connection
close. [Note: Since the spec is absurdly unclear on this question, application
authors who wish to avoid bugs and inconsistent behavior should ensure that all
transactions are explicitly either committed or rolled-back before close is
called.]
forceIgnoreUnresolvedTransactions Must be
set in c3p0.properties, C3P0 default: false
Strongly disrecommended. Setting
this to true may lead to subtle and bizarre bugs. This is a terrible setting,
leave it alone unless absolutely necessary. It is here to work around broken
databases / JDBC drivers that do not properly support transactions, but that
allow Connections' autoCommit flags to be set to false regardless. If you are
using a database that supports transactions "partially" (this is
oxymoronic, as the whole point of transactions is to perform operations
reliably and completely, but nevertheless, such databases exist), if you feel
comfortable ignoring the fact that Connections with autoCommit == false may be
in the middle of transactions and may hold locks and other resources, you may
turn off c3p0's wise default behavior, which is to protect itself, as well as
the usability and consistency of the database, by either rolling back (default)
or committing (see c3p0.autoCommitOnClose above) unresolved transactions. This
should only be set to true when you are sure you are using a database that
allows Connections' autoCommit flag to go to false, but that it offers no other
meaningful support of transactions. Otherwise setting this to true is just a
bad idea.
numHelperThreads Must be
set in c3p0.properties, C3P0 default: 3
c3p0 is very asynchronous. Slow
JDBC operations are generally performed by helper threads that don't hold
contended locks. Spreading these operations over multiple threads can
significantly improve performance by allowing multiple operations to be
performed simultaneously.
factoryClassLocation Must be
set in c3p0.properties, C3P0 default: null
Configuration for c3p0 connection pool
<
bean
id
=
"notificationDataSource"
class
=
"com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method
=
"close"
>
<
property
name
=
"driverClass"
><
value
>#{notification.db.driver}</
value
></
property
>
<
property
name
=
"jdbcUrl"
><
value
>#{notification.db.url}</
value
></
property
>
<
property
name
=
"user"
><
value
>#{notification.db.username}</
value
></
property
>
<
property
name
=
"password"
><
value
>#{encrypted.notification.db.password}</
value
></
property
>
<
property
name
=
"initialPoolSize"
><
value
>#{notification.c3po.initial.poolsize}</
value
></
property
>
<
property
name
=
"minPoolSize"
><
value
>#{notification.c3po.min.poolsize}</
value
></
property
>
<
property
name
=
"maxPoolSize"
><
value
>#{notification.c3po.max.poolsize}</
value
></
property
>
<
property
name
=
"acquireIncrement"
><
value
>#{notification.c3po.acquireIncrement}</
value
></
property
>
<
property
name
=
"maxStatementsPerConnection"
><
value
>#{c3po.maxStatementsPerConnection}</
value
></
property
>
<
property
name
=
"numHelperThreads"
><
value
>#{notification.c3po.numHelperThreads}</
value
></
property
>
<
property
name
=
"automaticTestTable"
><
value
>c3p0_test_table</
value
></
property
>
<
property
name
=
"maxConnectionAge"
><
value
>#{c3po.maxConnectionAge}</
value
></
property
>
<
property
name
=
"maxIdleTime"
><
value
>#{c3po.maxIdleTime}</
value
></
property
>
<
property
name
=
"maxIdleTimeExcessConnections"
><
value
>#{c3po.maxIdleTimeExcessConnections}</
value
></
property
>
<
property
name
=
"idleConnectionTestPeriod"
><
value
>#{c3po.idleConnectionTestPeriod}</
value
></
property
>
<
property
name
=
"testConnectionOnCheckin"
><
value
>#{c3po.testConnectionOnCheckin}</
value
></
property
>
<
property
name
=
"testConnectionOnCheckout"
><
value
>#{c3po.testConnectionOnCheckout}</
value
></
property
>
<
property
name
=
"acquireRetryAttempts"
><
value
>#{c3po.acquireRetryAttempts}</
value
></
property
>
<
property
name
=
"acquireRetryDelay"
><
value
>#{c3po.acquireRetryDelay}</
value
></
property
>
<
property
name
=
"unreturnedConnectionTimeout"
><
value
>#{c3po.unreturned.connection.timeout}</
value
></
property
>
<
property
name
=
"DebugUnreturnedConnectionStackTraces"
><
value
>#{c3po.debug.unreturned.connection.stacktrace}</
value
></
property
>
</
bean
>
Useful in c3Po connection pool debugging
debugUnreturnedConnectionStackTraces
Default: false
If true, and if unreturnedConnectionTimeout is set to a positive value, then the pool will capture the stack trace (via an Exception)
No comments:
Post a Comment