javadatasource使⽤_javaDatasource,数据库连接池
⽬前有多重⽅式创建数据库连接池:JNDI,DBCP,C3P0等
为什么需要连接池:
使⽤java Connection()创建数据库连接,耗费内存和时间,实时性低;这种⽅式获取的connection需要⼿动关闭,不然会耗费⼤量的内存资源;对于频繁数据库操作,这种⽅式会造成性能低,尤其web应⽤
数据库连接池的功能:
负责创建、管理和分配数据库连接。初始化数据库连接池时,会创建⼀定数量的数据库连接对象,并存放于数据库连接池中。当请求连接数据库时,连接池会分配处于空闲状态的连接;数据库连接不被使⽤时,会被连接池回收,并设置为空闲状态;当连接空闲时间⼤于在初始化连接池设定的连接空闲时间,连接池释放该连接。
数据库连接池介绍:
1、 JNDI
2、 C3p0
3、 Apache的Jakarta DBCP
4、 BoneCP
其中,sping框架依赖的第三⽅使⽤了c3p0和dbcp两种⽅式;⽽bonecp号称是速度最快的数据库连接池。JNDI⽅式创建实现的datasource是真正实现了javax.sql.datasource;其他的三种⽅式都不是。下⾯的列表,列出了⼏种⽅式的区别和不同:
序号
连接池名称
依赖的jar包
实现的datasource类
备注
1
JNDI
该数据源是由相应的web服务器(例如:tomcat,weblogic,websphere)负责初始化,创建,管理。程序中不需要引⼊特别的jar包。
Javax.sql.datasource
2
C3P0
jar
3
DBCP
commons-dbcp.jar,commons-pool.jar
org.apachemons.dbcp.BasicDataSource
4
BoneCP
bonecp-0.6.5.jar
· google-collections-1.0.jar
· slf4j-api-1.5.11.jar
· slf4j-log4j12-1.5.11.jar
·log4j-1.2.15.jar
BoneCPDataSource
备注:以上⼏种⽅式的数据库连接池的配置参数⼤同⼩异,略有差别;其参数的配置,既可以通过配置⽂件的⽅式配置,也可以通过硬编码的⽅式配置。
1,使⽤JNDI⽅式
这种⽅式,是由web服务器实现了java.sql.datasource。由web服务器负责初始化数据源,创建connection,分配,管理connection。由于本⾝是由web服务器实现的功能,因此不需要在项⽬project中引⼊特别的jar包,但是需要在服务器的某些配置⽂件中增加相关的配置。下⾯,以tomcat服务器为例,讲述这种⽅式的使⽤。
(1)、修改tomcat的conf下的l⽂件,增加Resource的配置的⽀持。
(2)、由于数据源是由tomcat负责创建,所以需要的jdbc驱动应该放到tomcat的lib路径下。
(3)、编写使⽤java代码,并放在tomcat环境下使⽤,如下:
public void jnditest(){
try catch的使用方法// TODO Auto-generated method stub
try {
Context initcontext=new InitialContext();
Context context=(Context) initcontext.lookup("java:comp/env");
DataSource datasource=(DataSource)context.lookup("jdbc/editortest");
Connection Connection();
Statement ateStatement();
String sql="select * from artical where id=1";
ResultSet uteQuery(sql);
()){
System.out.println("1:"+rs.getString(1));
System.out.println("2:"+rs.getString(2));
System.out.println("3:"+rs.getString(3));
System.out.println("4:"+rs.getString(4));
}
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
}
}
(4)、详情参考jndisql。Java⽂件,以及index.jsp。
注意:该测试不能在main⽅法中测试;可以写⼀个jsp在tomcat环境中测试。因为:java单元的环境是jdk;⽽jsp的环境却是tomcat;数据连接池是在tomcat中配置的,所以能正常运⾏的,但java测试的环境只有jdk,所以在引⽤数据连接池时就时出现不到环境的错误。
使⽤环境:当使⽤weblogic或者websphere等⾼级的web服务器的时候,可以考虑使⽤这种⽅式提⾼性能。
3、 使⽤C3p0⽅式
C3P0是开源的数据库连接组件,⽀持创建数据库连接池,管理connection等功能。使⽤该种⽅式做数据库连接时候,需要导⼊c3p0-0.9.1.2.jar。
同时,关于数据库连接的具体参数,例如:url,username,password,最⼩连接数,最⼤连接数。。。。。等信息既可以在xml配置⽂件中配置,也可以通过程序编码⽅式创建。Spring⽀持c3p0的数据库连接池⽅式,因此在spring环境中使⽤时,⽀持在l⽂件中配置。另外,由于数据库连接池在整个project中针对某个数据库⽽⾔是单例的,所以,即使通过编码的⽅式创建,那么要保证其单实例特性。如果存在多个,那么必然会导致性能低下。
下⾯,列出通过程序编码⽅式使⽤c3p0数据库连接池的⽅式。
ComboPooledDataSource ds = new ComboPooledDataSource();
try {
ds.setDriverClass("sql.jdbc.Driver");
ds.setJdbcUrl("jdbc:mysql://localhost:3306/editortest");
ds.setUser("root");
ds.setPassword("123456");
ds.setMaxPoolSize(20);
ds.setInitialPoolSize(10);
ds.setMaxIdleTime(2000);
Connection Connection();
Statement ateStatement();
String sql="select * from artical where id=1";
ResultSet uteQuery(sql);
()){
System.out.println("1:"+rs.getString(1));
System.out.println("2:"+rs.getString(2));
System.out.println("3:"+rs.getString(3));
System.out.println("4:"+rs.getString(4));
}
} catch (PropertyVetoException e) {
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
备注:通常使⽤⽅式,都是通过配置⽂件配置,⼏乎不会⽤到这种硬编码⽅式。在此,只是简单介绍C3P0的使⽤⽅式。详情,可以参考
c3p0test.java。
4、 使⽤dbcp⽅式
DBCP⽅式,是apache提供的数据源连接池⽅式,⽀持数据库连接池创建,管理connection等功能。使⽤环境,需要导⼊commons-dbcp.jar 和 commons-pool.jar两个jar包。上⾯提到的JNDI⽅式,其实质实⽤的就是dbcp数据源;只是他是通过在web服务器上做配置,由web服务器负责创建该数据源。
同样的,dbcp数据源也⽀持xml配置⽂件和硬编码两种⽅式。通常使⽤⽅式,都是通过配置⽂件配置,⼏乎不会使⽤硬编码⽅式。下⾯简单介绍dbcp⽅式的编码:
BasicDataSource ds = new BasicDataSource();
ds.setDriverClassName("sql.jdbc.Driver");
ds.setUrl("jdbc:mysql://localhost:3306/editortest");
ds.setUsername("root");
ds.setPassword("123456");
ds.setMaxIdle(20);
ds.setInitialSize(10);
ds.setMaxActive(2000);
try {
Connection Connection();
Statement ateStatement();
String sql="select * from artical where id=1";
ResultSet uteQuery(sql);
()){
System.out.println("1:"+rs.getString(1));
System.out.println("2:"+rs.getString(2));
System.out.println("3:"+rs.getString(3));
System.out.println("4:"+rs.getString(4));
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
5、 使⽤BoneCP⽅式。
BoneCP是快速⾼效的数据库连接池组件,据说性能上⽬前是最好得,⽐C3P0和DBCP快25倍。使⽤该组件,需要导⼊bonecp-
0.6.5.jar,google-collections-1.0.jar,slf4j-api-1.5.11.jar,slf4j-log4j12-1.5.11.jar,log4j-1.2.15.jar。
下⾯,简单列出编码⽅式的使⽤,做简单的了解。
BoneCPDataSource ds = new BoneCPDataSource();
ds.setDriverClass("sql.jdbc.Driver");
ds.setJdbcUrl("jdbc:mysql://localhost:3306/editortest");
ds.setUsername("root");
ds.setPassword("123456");
try {
Connection cn = ds.getConnection();
Statement st = cn.createStatement();
String sql = "select * from artical where id=1";
ResultSet rs = st.executeQuery(sql);
while (rs.next()) {
System.out.println("1:" + rs.getString(1));
System.out.println("2:" + rs.getString(2));
System.out.println("3:" + rs.getString(3));
System.out.println("4:" + rs.getString(4));
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
总结:以上,介绍了⼏种常⽤的数据源连接池;这⼏种连接池在使⽤过程,即⽀持硬编码的⽅式,也⽀持配置⽂件的配置⽅式;在正式实⽤的时候,应该尽量使⽤配置的⽅式,便于维护和管理。硬编码的⽅式,可以做为测试使⽤。同时,spring框架,通过他⾃⼰的⽅式集成上述⼏种数据源,理论上来说,都⽀持。各个数据源连接池都有⼀些公有的属性,因为他们都是从javax.sql.datasource继承⽽来,
⽽且都有最⼤连接数,初始化连接数等概念。同时,他们⼜分别有各⾃不同的属性,做了扩展。这⾥只是简单的介绍,在实际使⽤中,想要实现⾼性能的数据库连接池管理,还需要深⼊研究每种⽅式的连接属性配置;例如:根据实际需要,设置合适的最⼩连接数和最⼤连接数,等待时间等。
注:数据库连接池要保证连接池的单例
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论