对于共享资源,有一个很著名的设计模式:资源池(Resource Pool)。该模式正是为了解决资源的频繁分配﹑释放所造成的问题。数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。可以通过设定连接池最大连接数来防止系统无尽的与数据库连接。更为重要的是我们可以通过连接池的管理机制监视数据库的连接的数量﹑使用情况,为系统开发﹑测试及性能调整提供依据.
市面上也有很多开源的数据库连接池。主要有以下三个:
DBCP数据库连接池
C3P0 数据库连接池
Tomcat内置的数据库连接池(DBCP)
本文将介绍Tomcat-DBCP配置以及结合commons-dbutils的使用,(Tomcat-DBCP用于管理连接,而commons-dbutils则是用事先建立的连接或是DataSource的对象进行数据库操作).当然,你也可以使用Tomcat-DBCP管理连接,而用通常的java.sql.*来进行数据库操作.
需要特别注意的是在访问临界资源时的同步问题.为了使连接管理服务具有最大的通用性,必须考虑多线程环境,即并发问题。这个问题相对比较好解决,因为各个语言自身提供了对并发管理的支持像java,c#等等,使用synchronized(java)、lock(C#)关键字即可确保线程是同步的
一.配置commons-dbutils
配置commons-dbutils,参考: https://my.oschina.net/u/3887035/blog/1920653
二.配置Tomcat-DBCP
Tomcat默认使用的是DBCP数据库连接池,其实从本质上讲,Tomcat是利用Apache Commons DBCP来实现的,只不过把特定的功能集成到了tomcat-dbcp.jar包中,这个包在tomcat的lib里面.
1.配置context.xml
注意:(1)不是Context.xml,这个需要看你tomcat里面conf目录下是context.xml还是Context.xml,和这个一样就行.
(2)这个配置即可以在${CATALINA_HOME}/conf/context.xml里配置,(CATALINA_HOME是你tomcat的安装目录)
也可以在${CATALINA_HOME}/webapps/项目名/META-INF/context.xml里,(项目名就是webapps下的一些目录名称,
比如:ROOT.如果ROOT下没有META-INF,那么创建一个就行,然后再在META-INF里创建文档context.xml)
完整代码:
<Context path="/" docBase="/ROOT" debug="0" reloadable="true">
<Resource
name="mysql_connect"
auth="Container"
type="javax.sql.DataSource"
driverClassName="com.mysql.cj.jdbc.Driver"
url="jdbc:mysql://localhost:3306/makerpanda?useSSL=false"
username="makerpanda"