bboss 持久层配置apache dbcp,proxool,c3p0,Druid等数据源方法

好文章果断转载  出处:http://www.iteye.com/topic/1125741

bboss 持久层默认内置了apache dbcp(内置版本1.4)数据源,除此之外还可以非常简单和轻松地使用其他开源的数据源,这里以下面4种数据源为例进行说明(其他的数据源也可以参考其中的方法自己配置): 

apache dbcp(如果你觉得内置的版本不可靠,那么可以自己配置喜欢的dbcp版本) 
proxool 
c3p0 
Druid 

1.概述  

对于内置的dbcp的配置方法参考文档: bbossgroups持久层框架数据源配置文件实例 ,这里不过多的说明。本文详细介绍上述开源数据源的配置方法。 

为了支持这些数据源,poolman.xml文件中在datasource元素新增了一个datasourceFile子元素,用来指定第三方数据源的 bboss ioc配置文件 地址(相对于classpath路径),例如: 
<datasourceFile>druid.xml</datasourceFile> 
在这里druid.xml文件位于classes的根路径下,如果放在某个包路径下则需要带上包路径,例如: 
com/frameworkset/datasource/conf/druid.xml 

2.引用其他数据源的poolman.xml文件示例  
Xml代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!-- bboss 持久层框架中配置c3p0,dbcp,proxool,druid等第三方数据源的配置文件示例 -->  
  3. <poolman>  
  4.     <datasource>  
  5.   
  6.         <dbname>c3p0</dbname>  
  7.         <loadmetadata>false</loadmetadata>  
  8.         <enablejta>true</enablejta>  
  9.         <jndiName>c3p0_datasource_jndiname</jndiName>  
  10.         <datasourceFile>c3p0.xml</datasourceFile>  
  11.         <autoprimarykey>false</autoprimarykey>  
  12.         <showsql>false</showsql>  
  13.         <keygenerate>composite</keygenerate>  
  14.   
  15.     </datasource>  
  16.   
  17.     <datasource>  
  18.   
  19.         <dbname>dbcp</dbname>  
  20.         <loadmetadata>false</loadmetadata>  
  21.         <enablejta>true</enablejta>  
  22.         <jndiName>dbcp_datasource_jndiname_1</jndiName>  
  23.         <datasourceFile>dbcp.xml</datasourceFile>  
  24.         <autoprimarykey>false</autoprimarykey>  
  25.         <showsql>false</showsql>  
  26.         <keygenerate>composite</keygenerate>  
  27.     </datasource>  
  28.     <datasource>  
  29.   
  30.         <dbname>proxool</dbname>  
  31.         <loadmetadata>false</loadmetadata>  
  32.         <enablejta>true</enablejta>  
  33.         <jndiName>proxool_datasource_jndiname</jndiName>  
  34.         <datasourceFile>proxool.xml</datasourceFile>  
  35.         <autoprimarykey>false</autoprimarykey>  
  36.         <showsql>false</showsql>  
  37.         <keygenerate>composite</keygenerate>  
  38.     </datasource>  
  39.   
  40.     <datasource>  
  41.   
  42.         <dbname>druid</dbname>  
  43.         <loadmetadata>false</loadmetadata>  
  44.         <enablejta>true</enablejta>  
  45.         <jndiName>druid_datasource_jndiname</jndiName>  
  46.         <datasourceFile>druid.xml</datasourceFile>  
  47.         <autoprimarykey>false</autoprimarykey>  
  48.         <showsql>false</showsql>  
  49.         <keygenerate>composite</keygenerate>  
  50.     </datasource>  
  51.   
  52. </poolman>  


每个datasource的dbname属性是可以根据需要自己进行命名,对应于 持久层组件 的方法中的dbname属性,以便在相应的数据源上完成db操作。接下来看看每种数据源的定义示例 

3.基于bboss ioc管理的第三方数据源配置文件示例  

c3p0数据源-c3p0.xml  

Xml代码   收藏代码
  1. <property name="datasource" class="com.mchange.v2.c3p0.ComboPooledDataSource">  
  2.   <!-- 指定连接数据库的JDBC驱动 -->  
  3.   <property name="driverClass" value="oracle.jdbc.driver.OracleDriver"/>    
  4.   <!-- 连接数据库所用的URL -->  
  5.   <property name="jdbcUrl"  
  6.    value="jdbc:oracle:thin:@//10.0.15.134:1521/orcl">  
  7.    <!-- 如果数据库url是加密的,则需要配置解密的编辑器 -->  
  8.     <!--<editor clazz="com.frameworkset.common.poolman.security.DecryptEditor"/> -->  
  9.    </property>    
  10.   <!-- 连接数据库的用户名 -->  
  11.   <property name="user" value="GCMP">  
  12.     <!-- 如果账号是加密的账号,则需要配置解密的编辑器 -->  
  13. <!--     <editor clazz="com.frameworkset.common.poolman.security.DecryptEditor"/> -->  
  14.   </property>    
  15.   <!-- 连接数据库的密码 -->  
  16.   <property name="password" value="GCMP">  
  17.   <!-- 如果口令是加密的口令,则需要配置解密的编辑器 -->  
  18. <!--     <editor clazz="com.frameworkset.common.poolman.security.DecryptEditor"/> -->  
  19.   </property>  
  20.     
  21.   <!-- 设置数据库连接池的最大连接数 -->  
  22.   <property name="maxPoolSize" value="20"/>    
  23.   <!-- 设置数据库连接池的最小连接数 -->  
  24.   <property name="minPoolSize" value="2"/>  
  25.     
  26.   <!-- 设置数据库连接池的初始化连接数 -->  
  27.   <property name="initialPoolSize" value="2"/>  
  28.   <!-- 设置数据库连接池的连接的最大空闲时间,单位为秒 -->  
  29.   <property name="maxIdleTime" value="20"/>    
  30.   <property name="preferredTestQuery" value="select 1 from dual"/>  
  31.     
  32. </property>  
  33.    


dbcp数据源-dbcp.xml  

Xml代码   收藏代码
  1. <property name="datasource" class="org.apache.commons.dbcp.BasicDataSource">  
  2.     <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>    
  3.     <property name="url" value="jdbc:oracle:thin:@//10.0.15.134:1521/orcl"/>    
  4.     <property name="username" value="GCMP"/>    
  5.     <property name="password" value="GCMP"/>    
  6.     <!--initialSize: 初始化连接-->    
  7.     <property name="initialSize" value="5"/>    
  8.     <!--maxIdle: 最大空闲连接-->    
  9.     <property name="maxIdle" value="20"/>    
  10.     <!--minIdle: 最小空闲连接-->    
  11.     <property name="minIdle" value="5"/>    
  12.     <!--maxActive: 最大连接数量-->    
  13.     <property name="maxActive" value="15"/>    
  14.     <!--removeAbandoned: 是否自动回收超时连接-->    
  15.     <property name="removeAbandoned" value="true"/>    
  16.     <!--removeAbandonedTimeout: 超时时间(以秒数为单位)-->    
  17.     <property name="removeAbandonedTimeout" value="180"/>    
  18.     <!--maxWait: 超时等待时间以毫秒为单位 6000毫秒/1000等于6秒-->    
  19.     <property name="maxWait" value="3000"/>    
  20.     <property name="validationQuery" value="SELECT 1 from dual"/>     
  21.     <property name="testOnBorrow" value="true"/>   
  22. </property>  


proxool数据源-proxool.xml  

Xml代码   收藏代码
  1. <property name="datasource" class="org.logicalcobwebs.proxool.ProxoolDataSource">  
  2.   <!-- 指定连接数据库的JDBC驱动 -->  
  3.   <property name="driver" value="oracle.jdbc.driver.OracleDriver"/>    
  4.   <!-- 连接数据库所用的URL -->  
  5.   <property name="driverUrl"  
  6.    value="jdbc:oracle:thin:@//10.0.15.134:1521/orcl">  
  7.    <!-- 如果数据库url是加密的,则需要配置解密的编辑器 -->  
  8.     <!--<editor clazz="com.frameworkset.common.poolman.security.DecryptEditor"/> -->  
  9.    </property>    
  10.   <!-- 连接数据库的用户名 -->  
  11.   <property name="user" value="GCMP">  
  12.     <!-- 如果账号是加密的账号,则需要配置解密的编辑器 -->  
  13. <!--     <editor clazz="com.frameworkset.common.poolman.security.DecryptEditor"/> -->  
  14.   </property>    
  15.   <!-- 连接数据库的密码 -->  
  16.   <property name="password" value="GCMP">  
  17.   <!-- 如果口令是加密的口令,则需要配置解密的编辑器 -->  
  18. <!--     <editor clazz="com.frameworkset.common.poolman.security.DecryptEditor"/> -->  
  19.   </property>  
  20.   
  21.   
  22.     <property name="alias" value="Pool_dbname" />  
  23.     <property name="houseKeepingSleepTime" value="90000" />  
  24.     <property name="prototypeCount" value="0" />  
  25.     <property name="maximumConnectionCount" value="50" />  
  26.     <property name="minimumConnectionCount" value="2" />  
  27.     <property name="simultaneousBuildThrottle" value="50" />  
  28.     <property name="maximumConnectionLifetime" value="14400000" />  
  29.     <property name="houseKeepingTestSql" value="select 1 from dual1" />  
  30. </property>  


国产数据源druid-druid.xml  
Xml代码   收藏代码
  1. <property id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"  
  2.     init-method="init"><!-- 这里不需要配置destroy-method,因为bboss持久层在jvm退出时会自动调用数据源的close方法 -->  
  3.     <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />  
  4.     <property name="url" value="jdbc:oracle:thin:@//10.0.15.134:1521/orcl">  
  5.         <!-- 如果数据库url是加密的,则需要配置解密的编辑器 -->  
  6.         <!--<editor clazz="com.frameworkset.common.poolman.security.DecryptEditor"/> -->  
  7.     </property>  
  8.     <!-- 连接数据库的用户名 -->  
  9.     <property name="username" value="GCMP">  
  10.         <!-- 如果账号是加密的账号,则需要配置解密的编辑器 -->  
  11.         <!-- <editor clazz="com.frameworkset.common.poolman.security.DecryptEditor"/> -->  
  12.     </property>  
  13.     <!-- 连接数据库的密码 -->  
  14.     <property name="password" value="GCMP">  
  15.         <!-- 如果口令是加密的口令,则需要配置解密的编辑器 -->  
  16.         <!-- <editor clazz="com.frameworkset.common.poolman.security.DecryptEditor"/> -->  
  17.     </property>  
  18.     <property name="filters" value="stat" />  
  19.     <property name="maxActive" value="20" />  
  20.     <property name="initialSize" value="1" />  
  21.     <property name="maxWait" value="60000" />  
  22.     <property name="minIdle" value="1" />  
  23.     <property name="timeBetweenEvictionRunsMillis" value="3000" />  
  24.     <property name="minEvictableIdleTimeMillis" value="300000" />  
  25.     <property name="validationQuery" value="SELECT 1 from dual" />  
  26.     <property name="testWhileIdle" value="true" />  
  27.     <property name="testOnBorrow" value="false" />  
  28.     <property name="testOnReturn" value="false" />  
  29.     <property name="poolPreparedStatements" value="true" />  
  30.     <property name="maxPoolPreparedStatementPerConnectionSize"  
  31.         value="20" />  
  32. </property>  


4.安全特性  
特别需要注意的是:在c3p0数据源和国产数据源druid的配置文件(其他的数据源配置文件中也可以参考添加)中对于数据url,数据库账号,数据库口令几个元素的定义中都有个注释掉的子元素editor: 
Xml代码   收藏代码
  1. <!-- 如果数据库url是加密的,则需要配置解密的编辑器 -->  
  2.         <!--<editor clazz="com.frameworkset.common.poolman.security.DecryptEditor"/> -->  

editor元素的作用就是,如果相应的值是一个加密的值,则需要通过editor元素配置一个解密的插件(参考这个示例放开注释即可),以遍ioc框架将解密后的值注入到对于的数据源对象中。bboss持久层提供了一个解密插件: 
com.frameworkset.common.poolman.security.DecryptEditor 
DecryptEditor实现了bboss ioc的com.frameworkset.util.EditorInf接口,代码如下: 
Java代码   收藏代码
  1. /* 
  2.  *  Copyright 2008 biaoping.yin 
  3.  * 
  4.  *  Licensed under the Apache License, Version 2.0 (the "License"); 
  5.  *  you may not use this file except in compliance with the License. 
  6.  *  You may obtain a copy of the License at 
  7.  * 
  8.  *      http://www.apache.org/licenses/LICENSE-2.0 
  9.  * 
  10.  *  Unless required by applicable law or agreed to in writing, software 
  11.  *  distributed under the License is distributed on an "AS IS" BASIS, 
  12.  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
  13.  *  See the License for the specific language governing permissions and 
  14.  *  limitations under the License. 
  15.  */  
  16. package com.frameworkset.common.poolman.security;  
  17.   
  18. import com.frameworkset.util.EditorInf;  
  19.   
  20. /** 
  21.  *  
  22.  * <p>Title: DecryptEditor.java</p> 
  23.  * 
  24.  * <p>Description: 对信息进行解密的属性编辑器,主要用户对于连接池账号信息进行加密的相关操作</p> 
  25.  * 
  26.  * <p>Copyright: Copyright (c) 2007</p> 
  27.  * @Date 2012-7-31 上午11:15:40 
  28.  * @author biaoping.yin 
  29.  * @version 1.0 
  30.  */  
  31. public class DecryptEditor implements EditorInf {  
  32.   
  33.     public Object getValueFromObject(Object fromValue) {  
  34.         return getValueFromString((String )fromValue) ;  
  35.     }  
  36.   
  37.     public Object getValueFromString(String fromValue) {  
  38.         try {  
  39.             return new DESCipher().decrypt((String)fromValue);  
  40.         } catch (Exception e) {  
  41.             return fromValue;  
  42.         }  
  43.     }  
  44.   
  45. }  


采用这个解密插件时,对应的信息加密方法如下: 
Java代码   收藏代码
  1. com.frameworkset.common.poolman.security.DESCipher aa = new com.frameworkset.common.poolman.security.DESCipher();  
  2.         String bb = aa.encrypt("123456");  
  3.         System.out.println(bb);  
  4.         System.out.println(aa.decrypt(bb));  
  5.           
  6.         bb = aa.encrypt("root");  
  7.         System.out.println("user:"+bb);  
  8.         System.out.println(aa.decrypt(bb));  
  9.           
  10.         bb = aa.encrypt("jdbc:mysql://localhost:3306/cim");  
  11.         System.out.println("url:"+bb);  
  12.         System.out.println(aa.decrypt(bb));  


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值