首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在JBOSS应用服务器下运行的Java应用程序中的数据库连接池

问在JBOSS应用服务器下运行的Java应用程序中的数据库连接池
EN

Stack Overflow用户
提问于 2015-10-14 15:40:41
回答 1查看 971关注 0票数 0

我正在尝试理解java应用程序中的数据库连接池,该应用程序部署在JBOSS下。顺便说一下,数据库连接没有问题。在JBOSS应用服务器中设置了一个数据库连接池,如下所示:

代码语言:javascript
复制
<datasource jta="false" jndi-name="java:/testDS" pool-name="testDS" enabled="true" use-java-context="true">
       <connection-url>jdbc:oracle:thin:@xxx</connection-url>
       <driver>oracle</driver>
       <pool>
             <min-pool-size>2</min-pool-size>
             <max-pool-size>15</max-pool-size>
             <prefill>true</prefill>
       </pool>
       <security>
             <user-name>admin</user-name>
             <password>admin</password>
       </security>
</datasource>

然后,获取连接的java代码如下所示:

代码语言:javascript
复制
String jndiName = "java:/testDS";
InitialContext jndiCntx = new InitialContext();
DataSource ds = (DataSource) jndiCntx.lookup(jndiName);
Connection connection = ds.getConnection();

上面的代码是否使用了连接池?如果是,下面的代码的目的是什么?我有点糊涂。这两个代码段之间有什么区别?

代码语言:javascript
复制
InitialContext jndiCntx = new InitialContext();
ConnectionPoolDataSource cpds = (ConnectionPoolDataSource) jndiCntx.lookup(jndiName);            
PooledConnection pc = cpds.getPooledConnection();
Connection connection = pc.getConnection();
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-14 16:08:00

如果您查看JavaDoc at PooledConnection ( http://docs.oracle.com/javase/7/docs/api/javax/sql/PooledConnection.html),它由ConnectionPoolDataSource返回,您可以阅读:

应用程序程序员不直接使用PooledConnection接口,而是由管理连接池的中间层基础结构使用。 当应用程序调用方法DataSource.getConnection时,它将获得一个连接对象。如果正在执行连接池,则该连接对象实际上是PooledConnection对象的句柄,这是一个物理连接。

数据源的典型用法如下所示:

代码语言:javascript
复制
@Stateless
public class MyBean {

    @Resource(lookup = "java:/testDS")
    private DataSource dataSource;

    public void testDatasource() {
        try (Connection connection = dataSource.getConnection()) {

            // use the connection 

        } catch (SQLException e) {
            throw new SomeRuntimeException(e);
        }
    }
}

重要的是您在使用后关闭连接。最好的方法是尝试-自动关闭。否则,您的服务器就会耗尽连接。

使用"@Statless“启动事务。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33129787

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档