关于java数据库连接池配置的几种方式
今天遇到了关于数据源连接池配置的问题,发现有很多种方式可以配置,现总结如下,(已Mysql数据库为例)
方式一:在WebRoot下面建文件夹META-INF,里面建一个文件context.xml,内容如下:
- <Context>
- <Resource name="jdbc/test" auth="Container" type="javax.sql.DataSource"
- maxActive="50" maxIdle="30" maxWait="10000" logAbandoned="true"
- username="root" password="111111" driverClassName="com.mysql.jdbc.Driver"
- url="jdbc:mysql://localhost:3306/testdb" />
- </Context>
方式二:在tomcat6.0的目录conf下面的context.xml中,修改原来的context标签,改成内容如下:
- <Context>
- <!-- Default set of monitored resources -->
- <WatchedResource>WEB-INF/web.xml</WatchedResource>
- <Resource name="jdbc/test" auth="Container" type="javax.sql.DataSource"
- maxActive="50" maxIdle="30" maxWait="10000" logAbandoned="true"
- username="root" password="111111" driverClassName="com.mysql.jdbc.Driver"
- url="jdbc:mysql://localhost:3306/testdb" />
- </Context>
方式三:在配置虚拟目录时,也就是在配置conf下面的server.xml时,在context标签内改成如下形式:
- <Context path="/WebRoot" reloadable="true" docBase="E:\workspace\DataSource\WebRoot" >
- <Resource name="jdbc/test" auth="Container" type="javax.sql.DataSource"
- maxActive="50" maxIdle="30" maxWait="10000" logAbandoned="true"
- username="root" password="111111" driverClassName="com.mysql.jdbc.Driver"
- url="jdbc:mysql://localhost:3306/testdb" />
- </Context>
配置文件中Resource标签中各属性的含义:
driverClassName: JDBC 所用到的数据库驱动的类全名.
maxActive: 连接池在同一时刻内所提供的最大活动连接数。
maxIdle: 连接池在空闲时刻保持的最大连接数.
maxWait: 当发生异常时数据库等待的最大毫秒数 (当没有可用的连接时).
password: 连接数据库的密码.
url: 连接至驱动的URL. (为了向后兼容, DRIVERNAME也被允许.)
user: 数据库用户名.
测试代码:
- Context context = Context.lookup("java:/comp/env");
- DataSource ds = (DataSource)context.lookup("jdbc/test");
- System.out.println(ds.getConnection());
如果打印的结果不为空的话表示,数据连接池配置成功。
优缺点分析:
数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出。对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标。数据库连接池正是针对这个问题提出来的。数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而再不是重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。但是如何初始化时的数据库的最大连接数,最小连接数会影响资源的利用率,太大则造成资源浪费,太小则不够用。在外部配置数据连接池,这种方式要比自己写代码实现要容易些,只需要简单修改一下配置文件就行。缺点也很明显,就是不灵活,如果要修改最大的连接数的需要重启web服务器生效,这在实际的运行中,是很不方便的,因为一个web服务器可能布置了好几个应用,这样无疑会影响其他的web应用,造成意想不到的损失。如果采用程序实现,可以动态调节。之后我可能会提供程序版,数据库连接池的实现。
转载于:https://blog.51cto.com/webcrawler/1191891