Tomcat中用JNDI方式加载JDBC DataSource以连接数据库

概括一下,大致分为四步:安装驱动,填充context.xml,填充web.xml,编写程序取得连接。通过一个小DEMO对这种配置方式有了一点了解,以tomcat6.0连接mysql5.0.8数据库为例。

安装驱动

下载与所要连接的数据库版本对应的JDBC驱动程序,加入到应用的CLASSPATH。如果用tomcat部署,tomcat中最好也加上(笔者觉得好像没必要加,可是不加的话会报错……所以还是加了)。应该有办法不加的,若有高手路过,请指点。

填充context.xml

这里就像是做声明样的,把你要连接时的相关属性定义在里面。我的配置如下:

<Context crossContext="true" docBase="E:/workspace/myeclipse-workspace/WebDevDemo/WebRoot" path="/webdemo">

<Resource name="jdbc/EmployeeDB"

auth="Container"

type="javax.sql.DataSource"

username="root"

password=""

driverClassName="com.mysql.jdbc.Driver"

url="jdbc:mysql://localhost:3306/employee"

maxActive="8"

maxIdle="4"/>

</Context>

填充web.xml。我的配置:

<resource-ref>

<res-ref-name>jdbc/EmployeeDB</res-ref-name>

<res-type>javax.sql.DataSource</res-type>

<res-auth>Container</res-auth>

</resource-ref>

编写程序取得连接。俺的程序:

Context ctx = null;

Context context = null;

DataSource dataSource = null;

Connection conn = null;

PreparedStatement statement = null;

ResultSet rs = null;

try {

ctx = new InitialContext();

context = (Context) ctx.lookup("java:comp/env");

dataSource = (DataSource)context.lookup("jdbc/EmployeeDB");

} catch (NamingException e) {

e.printStackTrace();

}

try {

conn = dataSource.getConnection();//获得连接

//            取数据

statement = conn.prepareStatement(SQL_FIND_ALL_SALARY_RECORDS);

rs = statement.executeQuery();

} catch (SQLException e) {

e.printStackTrace();

}

按照以上的方式就能在tomcat里以配置的形式连接数据库,比我们把所有的连接属性都定义在类里要方便多了。由于公司用的还是5.0版的tomcat,所以笔者也用这个进行了实验,在操作上与6.0有两处不同:

(1)在上面的第一步,加载驱动时。若是5.0版的,驱动的JAR包要放在%CATALINA_HOME%\common\lib下面;若是6.0版的,驱动的JAR包要放在%CATALINA_HOME%\lib下面。

(2)在上面的第二步,声明连接的方式有所不同。5.0版比较复杂点,需要像下面这样配:

<Resource name="jdbc/EmployeeDB" auth="Container" type="javax.sql.DataSource"/>

<ResourceParams name="jdbc/EmployeeDB">

<parameter>

<name>username</name>

<value>root</value>

</parameter>

<parameter>

<name>password</name>

<value></value>

</parameter>

<parameter>

<name>driverClassName</name>

<value>com.mysql.jdbc.Driver</value>

</parameter>

<parameter>

<name>url</name>

<value>jdbc:mysql://localhost:3306/employee</value>

</parameter>

<parameter>

<name>maxActive</name>

<value>8</value>

</parameter>

<parameter>

<name>maxIdle</name>

<value>4</value>

</parameter>

</ResourceParams>

</Context>

效果一样,只是写法不同,6.0版本对配置文件做了简化,所以看起来清爽一些。呵呵,这貌似就是软件的升级哦

欢迎工作一到五年的Java工程师朋友们加入Java工程师学习交流群:795632998

群内提供免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏zhangdd.com

升级Windows 10常见问题解决方案汇总

微软已经正式向全球推送了Windows 10操作系统,与以往Windows产品不同的是,微软对windows7和Windows 8.1 的用户施行免费升级的策略...

872
来自专栏生信技能树

R包安装大全-番外篇一

SingleCellExperiment是单细胞转录组数据的基础包,大部分其它单细胞转录组数据处理的包都依赖于它,就跟芯片数据里面的ExpressionSet对...

5388
来自专栏即时通讯技术

应用保活终极总结(二):Android6.0及以上的保活实践(进程防杀篇)

在Android 4.4及以后的系统中,应用能否常驻内存,一直以来都是相当头疼的事情,尤其移动端IM、消息推送这类应用,为了保证“全时在线”的概念,真是费尽了心...

7531
来自专栏iKcamp

iKcamp|基于Koa2搭建Node.js实战(含视频)☞ 处理静态资源

视频地址:https://www.cctalk.com/v/15114923882788 处理静态资源 无非花开花落,静静。 指定静态资源目录 这里我们使用第...

4837
来自专栏腾讯Bugly的专栏

Android 开发者必知必会的权限管理知识

导语 本文主要讲解了Android 权限管理方面几个点: Android 权限背景知识; 权限检查及权限兼容; 跳转到app管理权限页面 一、Android 权...

4526
来自专栏LinkedBear的个人空间

【ERP项目开发】001.ERP简介、工程搭建

ERP项目开发系列笔记,是我所做的大学毕业设计的项目,基于真实企业的模拟开发。本系列对应录播视频可从哔哩哔哩观看。

2321
来自专栏魏艾斯博客www.vpsss.net

更换 sitemap 插件为 Google XML Sitemaps 及相关设置过程

2432
来自专栏逸鹏说道

前后端分离了,然后呢?

  前言   前后端分离已经是业界所共识的一种开发/部署模式了。所谓的前后端分离,并不是传统行业中的按部门划分,一部分人纯做前端(HTML/CSS/JavaSc...

3127
来自专栏互联网杂技

再谈前后端分离

前言 前后端分离已经是业界所共识的一种开发/部署模式了。所谓的前后端分离,并不是传统行业中的按部门划分,一部分人纯做前端(HTML/CSS/JavaScript...

3968
来自专栏linux、Python学习

123个Python黑客工具,再也不用问女朋友要手机密码了

今天的文章来源于dloss/python-pentest-tools,本文中列举了123个Python渗透测试工具,当然不仅于渗透~

6132

扫码关注云+社区

领取腾讯云代金券