JNDI配置DataResource代替JDBC连接数据库

JNDI配置DataResource代替JDBC连接数据库

1.JDBC和JNDI

​ JDBC就是我们连接数据库的一个标准的Java API,JDBC提供了一系列接口和规范,各个数据库公司根据其JDBC接口和规范,开发出各自的连接和操作数据库的.jar包。通过这些一系列的jar包和JDBC定义的一组类和接口,Java应用程序开发人员使用它来访问数据库和执行SQL语句。

​ JNDI(Java Name Directory Interface,Java命名和目录接口),它不仅仅是进行数据库定位的,它是给当前应用服务器所管理的所有资源一个唯一的标识,包括数据库,网页,文件,连接池等等。JNDI是一种标识,通过标识来 获取对应的资源。(或许很难懂,看下面的操作就明白了)

2.JNDI配置DataResource

在tomcat的conf/context.xml中配置

<!--
name:表示以后要查找的名称。通过此名称可以找到DataSource,此名称任意更换,但是程序中最终要查找的就是此名称,
 auth:由容器进行授权及管理,指的用户名和密码是否可以在容器上生效
type:此名称所代表的类型,现在为javax.sql.DataSource
 maxActive:表示一个数据库在此服务器上所能打开的最大连接数
maxIdle:表示一个数据库在此服务器上维持的最小连接数
 maxWait:最大等待时间(毫秒)。当连接等待maxWait没被使用,将销毁连接释放资源。
 username:数据库连接的用户名
 password:数据库连接的密码
 driverClassName:数据库连接的驱动程序
 url:数据库连接的地址
-->
<Resource 
       name="DBConn" 
       auth="Container" 
       type="javax.sql.DataSource"
       maxActive="100" 
       maxIdle="30" 
       maxWait="10000"
       username="root" 
       password="yourpwd" 
       driverClassName="com.mysql.jdbc.Driver"
       url="jdbc:mysql://localhost:3306/test"
/>

在项目web.xml文件中添加配置

<resource-ref>
    <description>DB Connection</description>
    <!--其内容对应上面前三个参数一一对应,目的是标识数据源-->
    <res-ref-name>DBConn</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
</resource-ref>

3.用DataSource中的连接来连接数据库

​ 与传统的JDBC不同,这里是直接通过数据源来获取连接数据库的连接,可以把数据源简单理解成连接池,我们在连接池中获取连接。

​ 如果使用JDBC来连接数据库,将会涉及频繁的数据库连接的创建和销毁,而数据库连接的创建是很耗时和吃性能的。所以我们利用JNDI来配置好数据源,在数据源里面已经有已经创建好的连接,我们使用是只需要在连接池里面拿连接就可以了,用完以后将连接放回到连接池之中。无需在用JDBC来创建连接和销毁。

​ 数据源的存在提高了数据库连接的复用,提高了性能,而且在更数据库连接时只有该配置就可以了。

DataSource ds = null;
Connection connect = null;
try {
    //获取Context.xml中的配置
	Context initContext = new InitialContext();
    //获取配置中的数据源(连接池)
	DataSource ds = (DataSource)initContext.lookup("java:comp/env/DBConn");
    //数据源中获取连接(在连接池里面拿一个连接出来)
    connect = ds.getConnection();
    //后面都是跟JDBC一样的数据库操作
    //········
	} catch (Exception e) {
		e.printStackTrace();
	}finally {
		//5、关闭数据连接,关闭的时候其实是将连接放回到连接池之中
    	Connection.close();
    }

posted @   鸭梨的药丸哥  阅读(24)  评论(0编辑  收藏  举报  
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示