在Tomcat中调用JNDI数据源的正确方法

Ava*_*nst 6 java tomcat jndi datasource

我在Tomcat服务器上使用Java Web应用程序,想知道在Tomcat的JNDI中访问数据库连接方面的"最佳实践"是什么?

目前,这基本上是我每次需要访问数据库时所做的事情:

Context envContext = null;
DataSource dataSource = null;
try {
    envContext  = (Context)ctx.lookup("java:/comp/env");
    dataSource = (DataSource)envContext.lookup("jdbc/datasource");
    return dataSource.getConnection();
} catch (Exception e){
    e.printStackTrace();
    return null;
}finally {
    if(envContext != null){
        try{
           envContext.close();
        } catch (NamingException e){
            e.printStackTrace();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,这是每次我想访问数据库时从JNDI查找连接的正确方法吗?我应该持有对Context或Datasource的引用吗?

小智 3

jndi 查找本质上是 Map 查找,因此它们的开销很小。但最好获取一次数据源并“缓存”它。因此,如果有的话,编写一个返回 DataSource 的方法是理想的选择,这样就不会将太多代码绑定到 J2EE 内部并使代码更易于测试。

  • JNDI 查找并不昂贵,“InitialContext”查找在每个应用程序容器中都**非常昂贵**,并且只应在应用程序启动时执行一次。大多数人不知道其中的区别。 (4认同)