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();
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)