失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > mysql配置数据库连接池_三种数据库连接池的配置

mysql配置数据库连接池_三种数据库连接池的配置

时间:2018-08-05 01:23:38

相关推荐

mysql配置数据库连接池_三种数据库连接池的配置

三种数据库连接池的配置及使用(For JDBC)

连接池的优缺点

优点

使用连接池的最主要的优点是性能。创建一个新的数据库连接所耗费的时间主要取决于网络的速

度以及应用程序和数据库服务器的

(

网络

)

距离,而且这个过程通常是一个很耗时的过程。而采用

数据库连接池后,数据库连接请求可以直接通过连接池满足而不需要为该请求重新连接、认证到

数据库服务器,这样就节省了时间。

缺点

数据库连接池中可能存在着多个没有被使用的连接一直连接着数据库

(

这意味着资源的浪费

)

DBCP

一、导包

Apache官网下载DBCP包,导入两个包路径如下:

commons-dbcp-1.4-bin\commons-dbcp-1.4\commons-dbcp-1.4.jar:连接池的实现

commons-pool-1.5.6-bin\commons-pool-1.5.6\commons-pool-1.5.6.jar:连接池实现的依赖库

CSDN上jar包的下载地址:/detail/u012802702/9491642

二、代码示例:

方式一:使用BasicDataSource通过方法设置连接参数。

//获取BasicDataSource并配置,开始....

BasicDataSourcesource=newBasicDataSource();

source.setDriverClassName("com.mysql.jdbc.Driver");

source.setUrl("jdbc:mysql:///dbcptest");

source.setUsername("root");

source.setPassword("root");

//获取BasicDataSource并配置,结束......

try{

conn=source.getConnection();

ps=conn.prepareStatement("select*fromaccount");

rs=ps.executeQuery();

while(rs.next()){

Stringname=rs.getString("name");

System.out.println(name);

}

}catch(Exceptione){

e.printStackTrace();

}finally{

if(rs!=null){

try{

rs.close();

}catch(SQLExceptione){

e.printStackTrace();

}finally{

rs=null;

}

}

if(ps!=null){

try{

ps.close();

}catch(SQLExceptione){

e.printStackTrace();

}finally{

ps=null;

}

}

if(conn!=null){

try{

conn.close();

}catch(SQLExceptione){

e.printStackTrace();

}finally{

conn=null;

}

}

}

其中的Close方法是被改写过得,及不会真正的将连接关闭,而是将其放回到连接池中,对于所有的数据源一般都会改写此方法(使用修饰)。

方式二:使用BasicDataSourceFactory+配置文件

try{//获取并配置DataSource开始

Propertiesprop=newProperties();

prop.load(newFileReader("dbcp.properties"));

BasicDataSourceFactoryfactory=newBasicDataSourceFactory();

DataSourcesource=factory.createDataSource(prop);

//获取并配置DataSource,结束

conn=source.getConnection();

ps=conn.prepareStatement("select*fromaccount");

rs=ps.executeQuery();

while(rs.next()){

Stringname=rs.getString("name");

System.out.println(name);

}

}catch(Exceptione){

e.printStackTrace();

}finally{

if(rs!=null){

try{

rs.close();

}catch(SQLExceptione){

e.printStackTrace();

}finally{

rs=null;

}

}

if(ps!=null){

try{

ps.close();

}catch(SQLExceptione){

e.printStackTrace();

}finally{

ps=null;

}

}

if(conn!=null){

try{

conn.close();

}catch(SQLExceptione){

e.printStackTrace();

}finally{

conn=null;

}

}

}

配置文件dbcp.properties(注配置文件中的参数的名称固定):

driver=com.mysql.jdbc.Driver

url=jdbc:mysql:///dbcptest

user=root

password=root

另:配置文件中除了可以配置以上4个数据库连接的必须信息外,还可以配置其他的参数,官方较完整的配置文件的参考如下:

#连接设置

driverClassName=com.mysql.jdbc.Driver

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

username=root

password=

#

initialSize=10

#最大连接数量,连接数连不能超过该值

maxActive=50

#

maxIdle=20

#

minIdle=5

#

maxWait=60000

#JDBC驱动建立连接时附带的连接属性属性的格式必须为这样:[属性名=property;]

#注意:"user"与"password"两个属性会被明确地传递,因此这里不需要包含他们。

connectionProperties=useUnicode=true;characterEncoding=gbk

#指定由连接池所创建的连接的自动提交(auto-commit)状态。

defaultAutoCommit=true

#driverdefault指定由连接池所创建的连接的事务级别(TransactionIsolation)。

#可用值为下列之一:(详情可见javadoc。)NONE,READ_UNCOMMITTED,READ_COMMITTED,REPEATABLE_READ,SERIALIZABLE

defaultTransactionIsolation=READ_UNCOMMITTED

C3P0

一、导包

下载C3p0数据源的jar包导入如下jar包:

Lib\c3p0-0.9.1.2.jar

CDSN的下载地址:/detail/u012802702/9491641

二、示例

方式一:使用代码配置参数

try{

ComboPooledDataSourcesource=newComboPooledDataSource();

source.setDriverClass("com.mysql.jdbc.Driver");

source.setJdbcUrl("jdbc:mysql:///day11");

source.setUser("root");

source.setPassword("root");

conn=source.getConnection();

ps=conn.prepareStatement("select*fromaccount");

rs=ps.executeQuery();

while(rs.next()){

Stringname=rs.getString("name");

System.out.println(name);

}

}catch(Exceptione){

e.printStackTrace();

}finally{

if(rs!=null){

try{

rs.close();

}catch(SQLExceptione){

e.printStackTrace();

}finally{

rs=null;

}

}

if(ps!=null){

try{

ps.close();

}catch(SQLExceptione){

e.printStackTrace();

}finally{

ps=null;

}

}

if(conn!=null){

try{

conn.close();

}catch(SQLExceptione){

e.printStackTrace();

}finally{

conn=null;

}

}

}

}

方式二:配置文件的方式加载数据库驱动信息

C3p0的使用较为简单,通常来说只要在src目录下添加一个c3p0的配置文件,在程序中使用一句代码

1)ComboPooledDataSourcesource=newComboPooledDataSource()使用配置文件中的默认配置,或者

2)ComboPooledDataSourcesource=newComboPooledDataSource(“配置文件中name-config的名称”)使用配置文件中的其他配置

默认情况下C3p0会在类加载路径下搜索名称为c3p0-config.xml的配置文件,因此该配置文件应该方式在类加载目录、或者jar加载目录、或者WEB-INF/classes、或类似目录下。

c3p0-config.xml文件配置如下:

com.mysql.jdbc.Driver

jdbc:mysql:///c3p0test

root

root

com.mysql.jdbc.Driver

jdbc:mysql:///c3p0test1

root

root

当然在配置文件中可以配置数据库连接池的其他相关信息,官方建议的基本配置参数有:

acquireIncrement:声明当连接池中连接耗尽时再一次新生成多少个连接,默认为3个

initialPoolSize:当连接池启动时,初始化连接的个数,必须在minPoolSize~maxPoolSize之间,默认为3

minPoolSize:任何时间连接池中保存的最小连接数,默认3

maxPoolSize:在任何时间连接池中所能拥有的最大连接数,默认15

maxIdleTime:超过多长时间连接自动销毁,默认为0,即永远不会自动销毁

C03p0的官方参考模板如下:

con_test

30000

30

10

超过多长时间连接自动销毁,默认为0,即永远不会自动销毁

30

100

10

200

10

1

0

声明当连接池中连接耗尽时再一次新生成多少个连接,默认为3个

50

当连接池启动时,初始化连接的个数,必须在minPoolSize~maxPoolSize之间,默认为3

100

任何时间连接池中保存的最小连接数,默认3

50

在任何时间连接池中所能拥有的最大连接数,默认15

1000

0

5

1

1

1

5

50

Tomcat内置数据源(DBCP)

Tomcat中内置有数据源,而DBCP与tomcat同属于Apache的项目,因此不难知道tomcat中内置的数据源其实就是DBCP数据源。使用Tomcat的内置数据源可分为两步:

一:为tomcat配置数据源

通常情况下,在使用eclipse或Myeclipse开发时,自己习惯于使用如下方式为tomcat配置数据源:

在web应用的META-INF文件夹下创建一个context.xml配置文件,并在其中添加标签进行配置,但,这种方式生成的数据源只能用于当前web应用.

详细context.xml文件的参考代码如下:

auth="Container"作者

type="javax.sql.DataSource"对象类型这里固定为DataSource即可

username="dbusername"数据库连接的用户名

password="dbpassword"连接密码

driverClassName="com.mysql.jdbc.Driver"驱动

url="jdbc:mysql:///dbcptest"数据库的url

maxActive="8"DBCP的参数,DBCP的其他参数可以加入

maxIdle="4"/>

在tomcat启动时,会逐个加载其中的web应用,当其加载到当前应用时,会加载到META-INF文件夹下该context.xml配置文件,此时tomcat会根据其中的配置信息为当前web应用创建一个数据库连接池,注该数据库连接池只能用于当前web应用,tomcat下的其他web应用无法使用该数据库连接池。至于如何配置tomcat的数据库连接池才能使当前tomcat下的所有web应用都能使用,或者可以使当前虚拟主机下的web应用都能使用?请参考其他文章:/u012802702/article/details/51159547。

二、程序中获取数据源

当tomcat读取到context.xml配置文件时会为当前web应用创建数据源,但我们在当前web应用中如何获取该数据源对象?

Tomcat中有一个共有的容器:jndi,当Tomcat为web应用创建数据源之后会将数据源以键值对的形式存放到jndi容器当中,其中键名就是数据源配置时给定的名字(详见context.xml配置文件)。

而Tomcat会自动将jndi容器放到初始化容器InitalContext中。且jndi以固定的名字(java:comp/env)存储在InitalContext容器中,因此在web应用中可以通过如下步骤首先获取到数据源实例。

第一步:首先在Servlet中获取InitalContext容器实例

ContextinitCtx=newInitialContext();

第二步:在InitalContext容器中根据字符串java:comp/env搜寻,以及获取jndi容器实例

Contextjndi=(Context)initCtx.lookup("java:comp/env");

第三部:根据数据源的名字从jndi容器获取到数据源实例。

DataSourcesource=jndi.lookUp("mySource");

完整参考代码如下:

ContextinitCtx=newInitialContext();

Contextjndi=(Context)initCtx.lookup("java:comp/env");

DataSourcesource=jndi.lookUp("mySource");

但到此获取到数据源对象还没有结束,因为获取jndi的代码只能在Servlet中执行,即以上代码只能在Servlet中执行,因此还应创建一个Servlet类并在其init方法中加入以上代码,之后便可以将数据源对象传给其他程序使用(可以将数据源对象设为类变量、或将其放入到ServletContext作用域中等等)。同时将该Servlet配置成为tomcat启动时执行(即在web.xml配置文件中对应的该Servlet标签下添加:1)。

参考代码如下:

@Override

publicvoidinit()throwsServletException{

try{

ContextinitCtx=newInitialContext();

Contextjndi=(Context)initCtx.lookup("java:comp/env");

DataSourcesource=(DataSource)jndi.lookup("mySource");

this.getServletContext().setAttribute(“dataSource”,source);

}catch(Exceptione){

e.printStackTrace();

thrownewRuntimeException(e);

}

}

如果觉得《mysql配置数据库连接池_三种数据库连接池的配置》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。