jspx.net 内置数据库连接池

一.连接池使用说明

数据库连接池,开源社区有很多连接池各有特点。目前测试下来感觉性能和并发性都非常出色的是c3p0连接池。 它能够保证低连接数,尽可能的提供更多连接,优化资源的使用。 如果你在使用了其他连接池都感到不满意的化,推荐你使用我们的数据库连接池看看效果,相信你会得到预想不到的效果,因为每个数据库的设计上都有不同的特点,能够得到不同的效果。 使用代理创建链接,数组存储配合读写锁的方式实现,完美的解决了同步和并发的问题.据有高并发和快速连接能力.能够解决常见的mysql8小时问题,能够使用邮件通知允许异常。支持sql验证链接,断线从链功能。 使用代理创建链接,是JspxDataSource的一个缩小版,适合租用空间这种对资源控制很死的环境,内置两个长链接,随机交替分配给用户使用。虽然只是两个链接,但普通的网站和应用都已经够用了。 普通pc机上能够支持到每秒10个并发,连接池大小设置将无效。 实现了标准的DataSource接口和ConnectionPoolDataSource接口,能够以标准接口方便的使用在其他应用中.能够自动回收内存泄露,避免内存溢出. 防止了超时断开连接的问题。防止web服务器和数据库不在同一台计算机上,数据库从启后就不能够在连接的问题. JspxDataSource设计上比较中规中矩,严格的控制资源使用,推荐使用在生产环境。 LimitDataSource只是为提供一个简单的链接环境,适合使用对连接数控制要求不高的系统中,或者调试系统使用。

二.使用方法

通过下边的方法配置就知道如何使用了。你开源在ioc容器中使用下边的配置在不同的开源平台上使用。 方法名称主要是为了兼容c3p0,所以设置的基本参数和c3p0很相像。 下边是sioc的配置 JspxDataSource 配置
    <bean id="jspxDataSource" class="com.jspx.datasource.JspxDataSource" destroy="close" singleton="true">  
           <string name="driverClass">${driverClassName}</string>  
           <string name="jdbcUrl">${jdbcUrl}</string>  
           <string name="user">${username}</string>  
           <string name="password">${password}</string>  
           <int name="maxPoolSize">${maxPoolSize}</int>  
       </bean>  
如果你想在程序中直接使用也很简单。下边的代码就能够让你得到数据源对象。使用完毕后注意要关闭连接。
    JspxDataSource dataSource = new JspxDataSource();  
    dataSource.setDriverClass("驱动");  
    dataSource.setJdbcUrl("jdbc连接");  
    dataSource.setUser("用户名");  
    dataSource.setMaxPoolSize(10); //最大连接数  
    dataSource.setMaxConnectionTime(180000); //3 minute 分钟,单位为毫秒  

    Connection connection = dataSource.getConnection();  
    connection.createStatement();  
    ......to do db action  
    connection.close(); 
maxConnectionTime影响速度,一般在10来分钟就差不多了。当有这么长的时间还没有使用的物理连接就关闭释放了。当然也不要太太小了,释放太快影响速度。 而且使用的时候使用单列创建一个数据源就可以了。 ThreadDataSource 连接池配置
    <bean id="jspxDataSource" class="com.jspx.datasource.LimitDataSource" singleton="true">  
           <string name="driverClass">${driverClassName}</string>  
           <string name="jdbcUrl">${jdbcUrl}</string>  
           <string name="user">${username}</string>  
           <string name="password">${password}</string>  
           <int name="maxPoolSize">${maxPoolSize}</int>  
       </bean>  
应用中使用的例子
    LimitDataSource dataSource = new LimitDataSource();  
    dataSource.setDriverClass("驱动");  
    dataSource.setJdbcUrl("jdbc连接");  
    dataSource.setUser("用户名");  
    dataSource.setMaxConnectionTime(180000); //3 minute 分钟,单位为毫秒  

    Connection connection = dataSource.getConnection();  
    connection.createStatement();  
    ......to do db action  
    connection.close();  

三.读写分离负载均衡支持

连接池能够支持读写分离的目前不多,就算连接池支持ORM支持意义也不大,毕竟手工的代码调用来实现分布式读写分对应用的调整比较大,购并不小, 在本构架中提供了完整的分布式读写分离负载均衡支持,开始的目的是针对postgresql 9.x后提供的主从数据库集群。这需要sober的支持,配置后就可以实现,无需代码,很方便。当然用在其他数据库上也没问题,4.5版本以后支持。 配置方式如下:
<bean id="readDataSource" class="com.jspx.datasource.JspxDataSource" destroy="close" singleton="true">
<string name="driverClass">${driverClassName}</string>
<string name="jdbcUrl"><![CDATA[jdbc:postgresql://192.168.0.201:5433/jspxnet]]></string>
<string name="user">${username}</string>
<string name="password"><![CDATA[${password}]]></string>
<int name="maxPoolSize">${maxPoolSize}</int>
<int name="readWrite">1</int>
</bean>

<bean id="writeDataSource" class="com.jspx.datasource.JspxDataSource" destroy="close" singleton="true">
<string name="driverClass">${driverClassName}</string>
<string name="jdbcUrl"><![CDATA[jdbc:postgresql://127.0.0.1:5432/jspxnet]]></string>
<string name="user">${username}</string>
<string name="password"><![CDATA[${password}]]></string>
<int name="maxPoolSize">${maxPoolSize}</int>
<int name="readWrite">0</int>
</bean>

<bean id="jspxDataSource" class="com.jspx.datasource.JRWPoolDataSource" singleton="true">
<list name="dataSources" class="ref">
<value>readDataSource</value>
<value>writeDataSource</value>
</list>
</bean>
readWrite 0:表示只读数据库 1:表示读写数据库。 JRWPoolDataSource中的数据源可以配置多个。使用的时候你只要通过JRWPoolDataSource 程序,使用参数就可以得到你所需要的数据库链接类型 JRWPoolDataSource采用标准的数据源接口。这样你将得到一个集群的数据源。 当然要使用这个集群的数据源你需要一个能够区分读写链接的调用接口,或者手工调用。 目前Sober支持。

四.其它支持配置说明

配置邮件提醒
    <string name="smtp">smtp 服务器</string>
    <string name="mailFrom">邮件账号</string>
    <string name="mailUser">邮件用户,(一般就是邮件账号)</string>
    <string name="mailPassword">密码</string>
    <string name="mailSendTo">接收邮件邮箱</string>
配置SQL验证,创建链接时将使用你配置的SQL来验证是否连接正常
    <string name="checkSql">SELECT 1</string>

五.密码加密配置

你可以通过程序 com.jspx.datasource.DriverManagerDataSource 的makePassword方法加密密码,得到密码后配置在密码中就可以了。
    <string name="password"><![CDATA[key:加密密码]]></string>