JdbcDataSource x JdbcConnectionPool
JdbcDataSource x JdbcConnectionPool
我想了解 JdbcDataSource 和 JdbcConnectionPool 的用途和区别。
基于代码中的 JdbcDataSource 或 JdbcConnectionPool 实现 javax.sql.DataSource。
我的主要问题是:我什么时候应该使用一个或另一个?
我在码头中创建了一个 JNDI 条目,例如:
<New id="h2ds" class="org.eclipse.jetty.plus.jndi.Resource">
<Arg><Ref refid="itracker" /></Arg>
<Arg>jdbc/itracker_ds</Arg>
<Arg>
<New class="org.h2.jdbcx.JdbcDataSource">
<Set name="url">db-url</Set>
<Set name="password">user-password</Set>
<Set name="user">user-password</Set>
</New>
</Arg>
</New>
我可以假设 org.h2.jdbcx.JdbcDataSource 像池一样工作,还是应该使用像 DBCP 或 C3P0 这样的池?
您永远不应该假设 javax.sql.DataSource
实现是一个连接池,尤其是当它不包含任何与连接池配置相关的属性时。
据我从其文档中得知,org.h2.jdbcx.JdbcDataSource
is a simple javax.sql.DataSource
(and javax.sql.ConnectionPoolDataSource
) and does not provide connection pooling, while org.h2.jdbcx.JdbcConnectionPool
是一个 javax.sql.DataSource
并提供非常基本的连接池。
然而,在大多数情况下,如果您使用完整的应用程序服务器(Jetty 不是),您最好使用 DBCP、HikariCP 或 C3p0 或内置连接池。
请注意 javax.sql.ConnectionPoolDataSource
的实现也不是连接池,它们旨在作为提供可池化连接的数据源 到 DataSource
提供连接池(例如来自应用程序服务器)。
我已更新我的配置以使用 HikariCP。看看:
<New id="h2ds" class="org.eclipse.jetty.plus.jndi.Resource">
<Arg><Ref refid="itracker" /></Arg>
<Arg>jdbc/itracker_ds</Arg>
<Arg>
<New class="com.zaxxer.hikari.HikariDataSource">
<Arg>
<New class="com.zaxxer.hikari.HikariConfig">
<Set name="maximumPoolSize">20</Set>
<Set name="dataSourceClassName">org.h2.jdbcx.JdbcDataSource</Set>
<Set name="password">db-password</Set>
<Set name="username">db-user</Set>
<Call name="addDataSourceProperty">
<Arg>url</Arg>
<Arg>db-url</Arg>
</Call>
</New>
</Arg>
</New>
</Arg>
</New>
现在我真的在使用连接池了。
我想了解 JdbcDataSource 和 JdbcConnectionPool 的用途和区别。
基于代码中的 JdbcDataSource 或 JdbcConnectionPool 实现 javax.sql.DataSource。
我的主要问题是:我什么时候应该使用一个或另一个?
我在码头中创建了一个 JNDI 条目,例如:
<New id="h2ds" class="org.eclipse.jetty.plus.jndi.Resource">
<Arg><Ref refid="itracker" /></Arg>
<Arg>jdbc/itracker_ds</Arg>
<Arg>
<New class="org.h2.jdbcx.JdbcDataSource">
<Set name="url">db-url</Set>
<Set name="password">user-password</Set>
<Set name="user">user-password</Set>
</New>
</Arg>
</New>
我可以假设 org.h2.jdbcx.JdbcDataSource 像池一样工作,还是应该使用像 DBCP 或 C3P0 这样的池?
您永远不应该假设 javax.sql.DataSource
实现是一个连接池,尤其是当它不包含任何与连接池配置相关的属性时。
据我从其文档中得知,org.h2.jdbcx.JdbcDataSource
is a simple javax.sql.DataSource
(and javax.sql.ConnectionPoolDataSource
) and does not provide connection pooling, while org.h2.jdbcx.JdbcConnectionPool
是一个 javax.sql.DataSource
并提供非常基本的连接池。
然而,在大多数情况下,如果您使用完整的应用程序服务器(Jetty 不是),您最好使用 DBCP、HikariCP 或 C3p0 或内置连接池。
请注意 javax.sql.ConnectionPoolDataSource
的实现也不是连接池,它们旨在作为提供可池化连接的数据源 到 DataSource
提供连接池(例如来自应用程序服务器)。
我已更新我的配置以使用 HikariCP。看看:
<New id="h2ds" class="org.eclipse.jetty.plus.jndi.Resource">
<Arg><Ref refid="itracker" /></Arg>
<Arg>jdbc/itracker_ds</Arg>
<Arg>
<New class="com.zaxxer.hikari.HikariDataSource">
<Arg>
<New class="com.zaxxer.hikari.HikariConfig">
<Set name="maximumPoolSize">20</Set>
<Set name="dataSourceClassName">org.h2.jdbcx.JdbcDataSource</Set>
<Set name="password">db-password</Set>
<Set name="username">db-user</Set>
<Call name="addDataSourceProperty">
<Arg>url</Arg>
<Arg>db-url</Arg>
</Call>
</New>
</Arg>
</New>
</Arg>
</New>
现在我真的在使用连接池了。