在普通的数据库访问程序中,客户程序获得的链接对象是物理链接,调用链接对象的close()方法将关闭链接,而采用链接池技术,客户程序获得的链接对象是链接池中物理链接的一个句柄,调用链接对象的close()方法,物理链接并无关闭,数据源的实现只是删除了客户程序中的链接对象和池中的链接对象之间的联系。css
第一部分:数据源的集中比较。
html
目前经常使用的数据源主要有c3p0、dbcp、proxool、druid,先来讲说他们
Spring 推荐使用dbcp;
Hibernate 推荐使用c3p0和proxool
一、 DBCP:apache
DBCP(DataBase connection pool)数据库链接池。是apache上的一个 java链接池项目,也是 tomcat使用的链接池组件。单独使用dbcp须要3个包:common-dbcp.jar,common-pool.jar,common-collections.jar因为创建数据库链接是一个很是耗时耗资源的行为,因此经过链接池预先同数据库创建一些链接,放在内存中,应用程序须要创建数据库链接时直接到链接池中申请一个就行,用完后再放回去。dbcp没有自动的去回收空闲链接的功能。java
二、 C3P0:
C3P0是一个开源的jdbc链接池,它实现了数据源和jndi绑定,支持jdbc3规范和jdbc2的标准扩展。c3p0是异步操做的,缓慢的jdbc操做经过帮助进程完成。扩展这些操做能够有效的提高性能。目前使用它的开源项目有Hibernate,Spring等。c3p0有自动回收空闲链接功能。mysql
三、 Proxool:Sourceforge
Proxool是一种Java数据库链接池技术。是sourceforge下的一个开源项目,这个项目提供一个健壮、易用的链接池,最为关键的是这个链接池提供监控的功能,方便易用,便于发现链接泄漏的状况。
综合来讲,稳定性是dbcp>=c3p0>proxoolsql
后来阿里巴巴的druid开源了,能够是前无古人后无来者,最强没有之一,是否的稳定,在大并发中表现十分好数据库
今天来介绍的主要是监控,德鲁伊提供的这个监控组件,很是的便利,截图以下:apache
这是针对全部sql的监控,运行效率等等都能看到tomcat
对于url的监控,请求时间,并发等等,很是便利服务器
当前数据源的配置信息也可以看到session
监控session,这是我当前登陆的
总的来讲,这个数据源仍是不错的,很是推荐,现在也已经到了1.0.23版本
<!-- 链接池 阿里巴巴数据源 全世界最牛逼的data source 没有之一 --> <druid.version>1.0.23</druid.version> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>${druid.version}</version> </dependency>
在上面的配置中,一般你须要配置url、username、password,maxActive这三项。
第三部分druid的使用
1:添加maven依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.18</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
2:添加一个资源配置文件(建议)
driver=com.mysql.jdbc.Driver
url=jdbc:mysql:///wangjian?characterEncoding=UTF-8&autoReconnect=true
username=root
password=1234
#最大链接数
maxActive=3
3:建立工厂类读取资源文件并建立javax.sql.DataSource的实例
须要先声明DruidDataSoure设置链接信息,其后再赋值给javax.sql.DataSource。完整代码以下:
Properties prop = new Properties();
prop.load(DSUtils.class.getResourceAsStream("pwd.properties"));
String driver = prop.getProperty("driver");
String url = prop.getProperty("url");
String username =prop.getProperty("username");
String password = prop.getProperty("password");
String maxActive = prop.getProperty("maxActive");
//声明DruidDataSource
DruidDataSource ds = new DruidDataSource();
ds.setDriverClassName(driver);
ds.setUrl(url);
ds.setUsername(username);
ds.setPassword(password);
ds.setMaxActive(Integer.parseInt(maxActive));
相信小伙伴位,在建立DruidDataSource之后,以然已经会使用了吧。哈哈~
4:对密码进行加密之后再保存到资源文件中并配置
因为在资源文件中,配置了数据库明文密码,为了保护密码,可使用Druid数据源密码加密的功能。
4.一、首先对密码进行加密获取一个publickey和加密后的密码
执行如下命令:
C:/>java –cp druid-1.0.18.jar com.alibaba.druid.filter.config.ConfigTools 密码
上面的命令中,蓝线部分为随机生成的publickey,每次随机。红线中的为生成的密码。
4.二、将publickey和密码配置到资源文件中
生成密码的命令:java -cp druid-1.0.18.jar com.alibaba.druid.filter.config.ConfigTools e234
driver=com.mysql.jdbc.Driver
url=jdbc:mysql:///wangjian?characterEncoding=UTF-8&autoReconnect=true&useSSL=false
username=root
#通过加密之后的密码
password=XSY9axcew83ZVNeZUmgrOPXwP0d3ZziFmqal4IZPAAJ4mpnwbouWiUaqD…
#最大链接数
maxActive=3
#生成的公钥
publicKey=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBANTxMV9TZYKpQCm7E+mEOhW0…
4.三、修改DruidDataSource实例化过程以下
主要是添加publickey和通过加密的密码,并指定过虑器:
//读取资源文件
Properties prop = new Properties();
prop.load(DSUtils.class.getResourceAsStream("pwd.properties"));
String driver = prop.getProperty("driver");
String url = prop.getProperty("url");
String username =prop.getProperty("username");
String password = prop.getProperty("password");
String maxActive = prop.getProperty("maxActive");
String publickey = prop.getProperty("publickey");
//声明DruidDataSource
DruidDataSource ds = new DruidDataSource();
ds.setDriverClassName(driver);
ds.setUrl(url);
ds.setUsername(username);
ds.setPassword(password);
ds.setMaxActive(Integer.parseInt(maxActive));
//config:使用ConfigFilter解密,Stat:启动监控功能StatFilter
ds.setFilters("config,stat");
//设置解密使用的publickey
ds.setConnectionProperties("config.decrypt=true;config.decrypt.key="+publickey);
5:配置监功能查看Druid数据源的监控信息
配置Druid用于监控的Servlet以下:
<servlet>
<servlet-name>DruidStatView</servlet-name>
<servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DruidStatView</servlet-name>
<url-pattern>/druid/*</url-pattern>
</servlet-mapping>
总结:
1:Druid数据源用维护链接对象是DruidDataSource 。
2:能够经过ConfigTools对用户的密码进行加密。
3:能够经过配置的方式,监控SQL执行。
转载:https://blog.csdn.net/yanguo110/article/details/68944659