设为首页 收藏本站
查看: 1090|回复: 0

[经验分享] bboss 持久层配置apache dbcp,proxool,c3p0,Druid等数据源方法

[复制链接]

尚未签到

发表于 2017-1-14 09:17:46 | 显示全部楼层 |阅读模式
bboss 持久层默认内置了apache dbcp(内置版本commons-pool2-2.3,commons-dbcp2-2.0.1)数据源,除此之外还可以非常简单和轻松地使用其他开源的数据源,这里以下面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 version="1.0" encoding="UTF-8"?>
<!-- bboss 持久层框架中配置c3p0,dbcp,proxool,druid等第三方数据源的配置文件示例 -->
<poolman>
<datasource>
<dbname>c3p0</dbname>
<loadmetadata>false</loadmetadata>
<enablejta>true</enablejta>
<jndiName>c3p0_datasource_jndiname</jndiName>
<datasourceFile>c3p0.xml</datasourceFile>
<autoprimarykey>false</autoprimarykey>
<showsql>false</showsql>
<keygenerate>composite</keygenerate>
</datasource>
<datasource>
<dbname>dbcp</dbname>
<loadmetadata>false</loadmetadata>
<enablejta>true</enablejta>
<jndiName>dbcp_datasource_jndiname_1</jndiName>
<datasourceFile>dbcp.xml</datasourceFile>
<autoprimarykey>false</autoprimarykey>
<showsql>false</showsql>
<keygenerate>composite</keygenerate>
</datasource>
<datasource>
<dbname>proxool</dbname>
<loadmetadata>false</loadmetadata>
<enablejta>true</enablejta>
<jndiName>proxool_datasource_jndiname</jndiName>
<datasourceFile>proxool.xml</datasourceFile>
<autoprimarykey>false</autoprimarykey>
<showsql>false</showsql>
<keygenerate>composite</keygenerate>
</datasource>
<datasource>
<dbname>druid</dbname>
<loadmetadata>false</loadmetadata>
<enablejta>true</enablejta>
<jndiName>druid_datasource_jndiname</jndiName>
<datasourceFile>druid.xml</datasourceFile>
<autoprimarykey>false</autoprimarykey>
<showsql>false</showsql>
<keygenerate>composite</keygenerate>
</datasource>
</poolman>


每个datasource的dbname属性是可以根据需要自己进行命名,对应于持久层组件的方法中的dbname属性,以便在相应的数据源上完成db操作。接下来看看每种数据源的定义示例
3.基于bboss ioc管理的第三方数据源配置文件示例
c3p0数据源-c3p0.xml
<property name="datasource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<!-- 指定连接数据库的JDBC驱动 -->
<property name="driverClass" value="oracle.jdbc.driver.OracleDriver"/>  
<!-- 连接数据库所用的URL -->
<property name="jdbcUrl"
value="jdbc:oracle:thin:@//10.0.15.134:1521/orcl">
<!-- 如果数据库url是加密的,则需要配置解密的编辑器 -->
<!--<editor clazz="com.frameworkset.common.poolman.security.DecryptEditor"/> -->
</property>  
<!-- 连接数据库的用户名 -->
<property name="user" value="GCMP">
<!-- 如果账号是加密的账号,则需要配置解密的编辑器 -->
<!--   <editor clazz="com.frameworkset.common.poolman.security.DecryptEditor"/> -->
</property>  
<!-- 连接数据库的密码 -->
<property name="password" value="GCMP">
<!-- 如果口令是加密的口令,则需要配置解密的编辑器 -->
<!--   <editor clazz="com.frameworkset.common.poolman.security.DecryptEditor"/> -->
</property>
<!-- 设置数据库连接池的最大连接数 -->
<property name="maxPoolSize" value="20"/>  
<!-- 设置数据库连接池的最小连接数 -->
<property name="minPoolSize" value="2"/>
<!-- 设置数据库连接池的初始化连接数 -->
<property name="initialPoolSize" value="2"/>
<!-- 设置数据库连接池的连接的最大空闲时间,单位为秒 -->
<property name="maxIdleTime" value="20"/>  
<property name="preferredTestQuery" value="select 1 from dual"/>
</property>


dbcp数据源-dbcp.xml
<property name="datasource" class="org.apache.commons.dbcp2.BasicDataSource">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>  
<property name="url" value="jdbc:oracle:thin:@//10.0.15.134:1521/orcl"/>  
<property name="username" value="GCMP"/>  
<property name="password" value="GCMP"/>  
<!--initialSize: 初始化连接-->  
<property name="initialSize" value="5"/>  
<!--maxIdle: 最大空闲连接-->  
<property name="maxIdle" value="20"/>  
<!--minIdle: 最小空闲连接-->  
<property name="minIdle" value="5"/>  
<!--maxActive: 最大连接数量-->  
<property name="maxActive" value="15"/>  
<!--removeAbandoned: 是否自动回收超时连接-->  
<property name="removeAbandoned" value="true"/>  
<!--removeAbandonedTimeout: 超时时间(以秒数为单位)-->  
<property name="removeAbandonedTimeout" value="180"/>  
<!--maxWait: 超时等待时间以毫秒为单位 6000毫秒/1000等于6秒-->  
<property name="maxWait" value="3000"/>  
<property name="validationQuery" value="SELECT 1 from dual"/>  
<property name="testOnBorrow" value="true"/>
</property>

proxool数据源-proxool.xml
<property name="datasource" class="org.logicalcobwebs.proxool.ProxoolDataSource">
<!-- 指定连接数据库的JDBC驱动 -->
<property name="driver" value="oracle.jdbc.driver.OracleDriver"/>  
<!-- 连接数据库所用的URL -->
<property name="driverUrl"
value="jdbc:oracle:thin:@//10.0.15.134:1521/orcl">
<!-- 如果数据库url是加密的,则需要配置解密的编辑器 -->
<!--<editor clazz="com.frameworkset.common.poolman.security.DecryptEditor"/> -->
</property>  
<!-- 连接数据库的用户名 -->
<property name="user" value="GCMP">
<!-- 如果账号是加密的账号,则需要配置解密的编辑器 -->
<!--   <editor clazz="com.frameworkset.common.poolman.security.DecryptEditor"/> -->
</property>  
<!-- 连接数据库的密码 -->
<property name="password" value="GCMP">
<!-- 如果口令是加密的口令,则需要配置解密的编辑器 -->
<!--   <editor clazz="com.frameworkset.common.poolman.security.DecryptEditor"/> -->
</property>

<property name="alias" value="Pool_dbname" />
<property name="houseKeepingSleepTime" value="90000" />
<property name="prototypeCount" value="0" />
<property name="maximumConnectionCount" value="50" />
<property name="minimumConnectionCount" value="2" />
<property name="simultaneousBuildThrottle" value="50" />
<property name="maximumConnectionLifetime" value="14400000" />
<property name="houseKeepingTestSql" value="select 1 from dual1" />
</property>

国产数据源druid-druid.xml
<property id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
init-method="init"><!-- 这里不需要配置destroy-method,因为bboss持久层在jvm退出时会自动调用数据源的close方法 -->
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@//10.0.15.134:1521/orcl">
<!-- 如果数据库url是加密的,则需要配置解密的编辑器 -->
<!--<editor clazz="com.frameworkset.common.poolman.security.DecryptEditor"/> -->
</property>
<!-- 连接数据库的用户名 -->
<property name="username" value="GCMP">
<!-- 如果账号是加密的账号,则需要配置解密的编辑器 -->
<!-- <editor clazz="com.frameworkset.common.poolman.security.DecryptEditor"/> -->
</property>
<!-- 连接数据库的密码 -->
<property name="password" value="GCMP">
<!-- 如果口令是加密的口令,则需要配置解密的编辑器 -->
<!-- <editor clazz="com.frameworkset.common.poolman.security.DecryptEditor"/> -->
</property>
<property name="filters" value="stat" />
<property name="maxActive" value="20" />
<property name="initialSize" value="1" />
<property name="maxWait" value="60000" />
<property name="minIdle" value="1" />
<property name="timeBetweenEvictionRunsMillis" value="3000" />
<property name="minEvictableIdleTimeMillis" value="300000" />
<property name="validationQuery" value="SELECT 1 from dual" />
<property name="testWhileIdle" value="true" />
<property name="testOnBorrow" value="false" />
<property name="testOnReturn" value="false" />
<property name="poolPreparedStatements" value="true" />
<property name="maxPoolPreparedStatementPerConnectionSize"
value="20" />
</property>

bboss整合版-dbcp2(兼容jdk6,可监控性更好,dbcp2官方不兼容jdk6)
<property name="datasource" class="com.frameworkset.commons.dbcp2.BasicDataSource">
<property name="driverClassName" value="net.sourceforge.jtds.jdbc.Driver"/>  
<property name="url" value="jdbc:jtds:sqlserver://localhost:1433/sanyleasing"/>  
<property name="username" value="pms"/>  
<property name="password" value="pms"/>  
<!--initialSize: 初始化连接-->  
<property name="initialSize" value="5"/>  
<property name="maxTotal" value="20"/>  
<!--maxIdle: 最大空闲连接-->  
<property name="maxIdle" value="20"/>  
<!--minIdle: 最小空闲连接-->  
<property name="minIdle" value="20"/>  
<!--removeAbandoned: 是否自动回收超时连接-->  
<property name="removeAbandonedOnBorrow" value="false"/>
<property name="logAbandoned" value="true"/>
<!--removeAbandonedTimeout: 超时时间(以秒数为单位)-->  
<property name="removeAbandonedTimeout" value="180"/>  
<!--maxWait: 超时等待时间以毫秒为单位 6000毫秒/1000等于6秒-->  
<property name="maxWaitMillis" value="3000"/>  
<property name="validationQuery" value="SELECT 1 "/>  
<property name="testOnBorrow" value="true"/>
</property>

4.安全特性
特别需要注意的是:在c3p0数据源和国产数据源druid的配置文件(其他的数据源配置文件中也可以参考添加)中对于数据url,数据库账号,数据库口令几个元素的定义中都有个注释掉的子元素editor:
<!-- 如果数据库url是加密的,则需要配置解密的编辑器 -->
<!--<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接口,代码如下:
/*
*  Copyright 2008 biaoping.yin
*
*  Licensed under the Apache License, Version 2.0 (the "License");
*  you may not use this file except in compliance with the License.
*  You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
*  Unless required by applicable law or agreed to in writing, software
*  distributed under the License is distributed on an "AS IS" BASIS,
*  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*  See the License for the specific language governing permissions and
*  limitations under the License.
*/
package com.frameworkset.common.poolman.security;
import com.frameworkset.util.EditorInf;
/**
*
* <p>Title: DecryptEditor.java</p>
*
* <p>Description: 对信息进行解密的属性编辑器,主要用户对于连接池账号信息进行加密的相关操作</p>
*
* <p>Copyright: Copyright (c) 2007</p>
* @Date 2012-7-31 上午11:15:40
* @author biaoping.yin
* @version 1.0
*/
public class DecryptEditor implements EditorInf {
public Object getValueFromObject(Object fromValue) {
return getValueFromString((String )fromValue) ;
}
public Object getValueFromString(String fromValue) {
try {
return new DESCipher().decrypt((String)fromValue);
} catch (Exception e) {
return fromValue;
}
}
}


采用这个解密插件时,对应的信息加密方法如下:
com.frameworkset.common.poolman.security.DESCipher aa = new com.frameworkset.common.poolman.security.DESCipher();
String bb = aa.encrypt("123456");
System.out.println(bb);
System.out.println(aa.decrypt(bb));
bb = aa.encrypt("root");
System.out.println("user:"+bb);
System.out.println(aa.decrypt(bb));
bb = aa.encrypt("jdbc:mysql://localhost:3306/cim");
System.out.println("url:"+bb);
System.out.println(aa.decrypt(bb));

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-328168-1-1.html 上篇帖子: org.apache.tomcat.util.http.Parameters processParameters WARNING: Parameters: I 下篇帖子: Acitivi工作流引擎运行出现org.apache.jasper.JasperException: java.err.nojdk
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表