数据库连接池(java应用)
2016-04-22 13:48
295 查看
数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出。对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标。数据库连接池正是针对这个问题提出来的。数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。
Proxool
这是一个Java SQL Driver驱动程序,提供了对你选择的其它类型的驱动程序的连接池封装。可以非常简单的移植到现存的代码中。完全可配置。快速,成熟,健壮。可以透明地为你现存的JDBC驱动程序增加连接池功能。
首先proxool.xml
<?xml version="1.0" encoding="UTF-8"?>
<something-else-entirely>
<proxool>
<alias>datasource</alias>
<!--数据源的别名-->
<driver-url>jdbc:mysql://localhost:3306/demo</driver-url>
<!--url连接串-->
<driver-class>com.mysql.jdbc.Driver</driver-class>
<!--驱动类-->
<driver-properties>
<property name="user" value="root"/>
<!--用户名-->
<property name="password" value="root"/>
<!--密码-->
</driver-properties>
<!--最大连接数(默认5个),超过了这个连接数,再有请求时,就排在队列中等候,最大的等待请求数由maximum-new-connections决定 -->
<maximum-connection-count>100</maximum-connection-count>
<!--最小连接数(默认2个)-->
<minimum-connection-count>10</minimum-connection-count>
<!--proxool自动侦察各个连接状态的时间间隔(毫秒),侦察到空闲的连接就马上回收,超时的销毁 默认30秒-->
<house-keeping-sleep-time>90000</house-keeping-sleep-time>
<!--没有空闲连接可以分配而在队列中等候的最大请求数,超过这个请求数的用户连接就不会被接受-->
<maximum-new-connections>10</maximum-new-connections>
<!--最少保持的空闲连接数(默认2个)-->
<prototype-count>5</prototype-count>
<!--在使用之前测试-->
<test-before-use>true</test-before-use>
<!--用于保持连接的测试语句 -->
<house-keeping-test-sql>select username from user</house-keeping-test-sql>
</proxool>
</something-else-entirely>
web版的稍后贴出
Proxool
这是一个Java SQL Driver驱动程序,提供了对你选择的其它类型的驱动程序的连接池封装。可以非常简单的移植到现存的代码中。完全可配置。快速,成熟,健壮。可以透明地为你现存的JDBC驱动程序增加连接池功能。
首先proxool.xml
<?xml version="1.0" encoding="UTF-8"?>
<something-else-entirely>
<proxool>
<alias>datasource</alias>
<!--数据源的别名-->
<driver-url>jdbc:mysql://localhost:3306/demo</driver-url>
<!--url连接串-->
<driver-class>com.mysql.jdbc.Driver</driver-class>
<!--驱动类-->
<driver-properties>
<property name="user" value="root"/>
<!--用户名-->
<property name="password" value="root"/>
<!--密码-->
</driver-properties>
<!--最大连接数(默认5个),超过了这个连接数,再有请求时,就排在队列中等候,最大的等待请求数由maximum-new-connections决定 -->
<maximum-connection-count>100</maximum-connection-count>
<!--最小连接数(默认2个)-->
<minimum-connection-count>10</minimum-connection-count>
<!--proxool自动侦察各个连接状态的时间间隔(毫秒),侦察到空闲的连接就马上回收,超时的销毁 默认30秒-->
<house-keeping-sleep-time>90000</house-keeping-sleep-time>
<!--没有空闲连接可以分配而在队列中等候的最大请求数,超过这个请求数的用户连接就不会被接受-->
<maximum-new-connections>10</maximum-new-connections>
<!--最少保持的空闲连接数(默认2个)-->
<prototype-count>5</prototype-count>
<!--在使用之前测试-->
<test-before-use>true</test-before-use>
<!--用于保持连接的测试语句 -->
<house-keeping-test-sql>select username from user</house-keeping-test-sql>
</proxool>
</something-else-entirely>
package Proxool; public class User { private String id; private String username; private String password; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
package Proxool; import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; import java.sql.Statement; import org.logicalcobwebs.proxool.ProxoolException; import org.logicalcobwebs.proxool.configuration.JAXPConfigurator; import org.xml.sax.InputSource; public class UserDao { static Connection conn; static Statement stmt; PreparedStatement pstmt; static{ // InputStream in=Class.class.getResourceAsStream("proxool.xml"); // InputSource inputsource=new InputSource(in); try { JAXPConfigurator.configure("D:\\workspace1\\spring_demo\\src\\main\\java\\Proxool\\proxool.xml", false);//这里要用绝对路径,不能用classpath Class.forName("org.logicalcobwebs.proxool.ProxoolDriver"); conn=DriverManager.getConnection("proxool.datasource"); stmt=conn.createStatement(); } catch (ProxoolException e) { e.printStackTrace(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void addUser(User user){ String sql="insert into user (id,username,pass) value(?,?,?)"; try { pstmt=conn.prepareStatement(sql); pstmt.setString(1,user.getId()); pstmt.setString(2,user.getUsername()); pstmt.setString(3,user.getPassword()); pstmt.execute(); } catch (SQLException e) { e.printStackTrace(); } } }
package Proxool; public class Test { public static void main(String[] args) { User user=new User(); user.setId("002"); user.setUsername("hello"); user.setPassword("world"); UserDao userDao=new UserDao(); userDao.addUser(user); } }java
web版的稍后贴出
相关文章推荐
- Java并发编程:volatile关键字解析(四.深入剖析volatile关键字)
- ZOJ 3498 Javabeans
- ZOJ 3498 Javabeans
- Spring配置数据源(dbcp/c3p0/jndi)
- java中的IO一
- java.lang.OutOfMemoryError: PermGen space及其解决方法
- Spring Junit4 测试Web应用程序
- Java中格式化输出数字
- 避免Java内存溢出的注意事项
- java.io.IOException:stream closed 异常的原因及处理
- Java的静态方法继承相关
- Java的集合
- java 抽象类和接口的理解
- java权限设置文件-java.policy
- [Java] 作业4答疑
- ssh(struts2+spring+hibernate)+mybatis,mybatis加事务控制
- JavaWeb之抓包之旅
- SpringMVC过滤器
- Java中的序列化Serialable高级详解
- java学习之注解