JdbcDataSource x JdbcConnectionPool

JdbcDataSource x JdbcConnectionPool,jdbc,jetty,h2,hikaricp,Jdbc,Jetty,H2,Hikaricp,我试图理解JdbcDataSource和JdbcConnectionPool之间的用途和区别 基于代码,JdbcDataSource或JdbcConnectionPool实现javax.sql.DataSource 我的主要问题是:我什么时候应该使用其中一种 我在jetty中创建了一个JNDI条目,如: <New id="h2ds" class="org.eclipse.jetty.plus.jndi.Resource"> <Arg><Ref refid="it

我试图理解JdbcDataSource和JdbcConnectionPool之间的用途和区别

基于代码,JdbcDataSource或JdbcConnectionPool实现javax.sql.DataSource

我的主要问题是:我什么时候应该使用其中一种

我在jetty中创建了一个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>

jdbc/itracker\u ds
数据库url
用户密码
用户密码

我可以假设org.h2.jdbcx.JdbcDataSource像池一样工作吗?或者我应该使用像DBCP或C3P0这样的池吗?

您不应该仅仅假设
javax.sql.DataSource
实现是一个连接池,尤其是当它不包含任何与连接池配置相关的属性时

从它的文档中可以看出,它是一个简单的
javax.sql.DataSource
(和
javax.sql.ConnectionPoolDataSource
),并且不提供连接池,而
javax.sql.DataSource
提供了非常基本的连接池

但是,在大多数情况下,如果您使用的是完整的应用程序服务器(Jetty不是),则最好使用DBCP、HikariCP或C3p0,或者使用内置连接池


请注意,
javax.sql.ConnectionPoolDataSource
的实现也不是一个连接池,它们旨在作为一个数据源,为提供连接池的数据源
提供可池连接

我已更新配置以使用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>

jdbc/itracker\u ds
20
org.h2.jdbcx.JdbcDataSource
数据库密码
数据库用户
网址
数据库url
现在我正在使用连接池