tomcat jdbc和druid对比,各自有哪些优缺点

 我来答
兄弟连教育
2016-07-06 · 百度知道合伙人官方认证企业
兄弟连教育
兄弟连教育成立于2006年,11年来专注IT职业教育,是国内专业的IT技术培训学校。2016年成功挂牌新三板(股票代码:839467)市值过亿。开设专注程序员培训专注php、Java、UI、云计算、Python、HTML5、
向TA提问
展开全部
JNDI学习总结(三)——Tomcat下使用Druid配置JNDI数据源
  com.alibaba.druid.pool.DruidDataSourceFactory实现了javax.naming.spi.ObjectFactory,可以作为JNDI数据源来配置。
一、下载Druid的jar包
  下载地址:http://mvnrepository.com/artifact/com.alibaba/druid/1.0.9,如下图所示:
  
  druid.jar依赖log4j的jar包,所以还需要下载log4j的jar包。
  log4j的下载地址如下:http://mvnrepository.com/artifact/log4j/log4j/1.2.17,如下图所示:
  
二、使用Druid配置JNDI数据源
2.1、前期准备工作
  创建一个Web测试项目Druid_JNDI_Config,将下载下来druid-1.0.9.jar和log4j-1.2.17.jar添加到项目中,在项目的META-INF目录下创建一个context.xml文件
  目录结构如下图所示:
  
  在tomcat服务器的lib目录下添加Oracle、MySQL、SQLServer三种数据库的驱动jar包,如下图所示:
  
2.2、在context.xml文件中加入JNDI的配置信息
  在context.xml文件中加入如下配置信息

1 <Context>
2 <!-- 使用阿里巴巴的DruidDataSource配置针对Oracle数据库的JNDI数据源 -->
3 <Resource
4 name="jdbc/OracleDataSource"
5 factory="com.alibaba.druid.pool.DruidDataSourceFactory"
6 auth="Container"
7 type="javax.sql.DataSource"
8 driverClassName="oracle.jdbc.OracleDriver"
9 url="jdbc:oracle:thin:@192.168.1.229:1521:lead"
10 username="lead_oams"
11 password="p"
12 maxActive="50"
13 maxWait="10000"
14 removeabandoned="true"
15 removeabandonedtimeout="60"
16 logabandoned="false"
17 filters="stat"/>
18
19 <!-- 使用阿里巴巴的DruidDataSource配置针对MySQL数据库的JNDI数据源 -->
20 <Resource
21 name="jdbc/MysqlDataSource"
22 factory="com.alibaba.druid.pool.DruidDataSourceFactory"
23 auth="Container"
24 type="javax.sql.DataSource"
25 driverClassName="com.mysql.jdbc.Driver"
26 url="jdbc:mysql://192.168.1.233:3306/lead_oams?useUnicode=true&characterEncoding=utf-8"
27 username="lead_system"
28 password="password"
29 maxActive="50"
30 maxWait="10000"
31 removeabandoned="true"
32 removeabandonedtimeout="60"
33 logabandoned="false"
34 filters="stat"/>
35
36 <!--使用阿里巴巴的DruidDataSource配置针对SQLServer数据库的JNDI数据源-->
37 <Resource
38 name="jdbc/SqlServerDataSource"
39 auth="Container"
40 factory="com.alibaba.druid.pool.DruidDataSourceFactory"
41 type="javax.sql.DataSource"
42 driverClass="com.microsoft.sqlserver.jdbc.SQLServerDriver"
43 url="jdbc:sqlserver://192.168.1.61:1433;DatabaseName=gaclTest"
44 username="sa"
45 password="p@ssw0rd"
46 maxActive="50"
47 maxWait="10000"
48 removeabandoned="true"
49 removeabandonedtimeout="60"
50 logabandoned="false"
51 filters="stat"/>
52 </Context>

  配置项中指定了各个参数后,在连接池内部是这么使用这些参数的。数据库连接池在初始化的时候会创建initialSize个连接,当有数据库操作时,会从池中取出一个连接。如果当前池中正在使用的连接数等于maxActive,则会等待一段时间,等待其他操作释放掉某一个连接,如果这个等待时间超过了maxWait,则会报错;如果当前正在使用的连接数没有达到maxActive,则判断当前是否空闲连接,如果有则直接使用空闲连接,如果没有则新建立一个连接。在连接使用完毕后,不是将其物理连接关闭,而是将其放入池中等待其他操作复用。同时连接池内部有机制判断,如果当前的总的连接数少于miniIdle,则会建立新的空闲连接,以保证连接数得到miniIdle。如果当前连接池中某个连接在空闲了timeBetweenEvictionRunsMillis时间后任然没有使用,则被物理性的关闭掉。有些数据库连接的时候有超时限制(mysql连接在8小时后断开),或者由于网络中断等原因,连接池的连接会出现失效的情况,这时候设置一个testWhileIdle参数为true,可以保证连接池内部定时检测连接的可用性,不可用的连接会被抛弃或者重建,最大情况的保证从连接池中得到的Connection对象是可用的。当然,为了保证绝对的可用性,你也可以使用testOnBorrow为true(即在获取Connection对象时检测其可用性),
不过这样会影响性能。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式