`

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

阅读更多
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="com.mysql.jdbc.Driver" />
	<property name="url"><![CDATA[jdbc:mysql://localhost:3306/testdb?useUnicode=true&characterEncoding=utf-8&autoReconnect=true]]></property>
	<property name="username" value="root" />
	<property name="password" value="123456" />
	<!--initialSize: 初始化连接 -->
	<property name="initialSize" value="5" />
	<!--maxIdle: 最大空闲连接 -->
	<property name="maxIdle" value="20" />
	<!--minIdle: 最小空闲连接 -->
	<property name="minIdle" value="5" />
	<!--maxActive: 最大连接数量 -->
	<property name="maxTotal" value="15" />
	<!--removeAbandoned: 是否自动回收超时连接 -->
	<property name="removeAbandonedOnBorrow" 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>


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));



常用的数据库驱动配置
postgresql
<property name="driverClassName" value="org.postgresql.Driver"/> 
<property name="url" value="jdbc:postgresql://127.0.0.1:5432/test"/> 
<property name="username" value="beigang"/> 
<property name="password" value="beigang"/>

oracle
   <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"/>    

sqlserver

<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"/> 

mysql

<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
     
        <property name="url"><![CDATA[jdbc:mysql://localhost:3306/bboss?useUnicode=true&characterEncoding=utf-8]]></property>
       
        <property name="username" value="root"/>
        <property name="password" value="123456"/> 

derby
<property name="driverClassName" value="org.apache.derby.jdbc.EmbeddedDriver"/> 

<property name="url" value="jdbc:derby:E:/workspace/bbossgroups/bboss-document/database/cimdb"/>
<property name="username" value=""/> 
<property name="password" value=""/> 

sqlite
<property name="driverClassName" value="org.sqlite.JDBC"/> 
<property name="url" value="jdbc:sqlite:///home/data"/>
<property name="username" value="root"/> 
<property name="password" value="root"/>


分享到:
评论
2 楼 yin_bp 2013-09-17  
liuhu2967 写道
你好,我是BBOSS的忠实用户,请问下是否能支持下boneCP tomcat jdbc pool 等高性能的连接池

bboss持久层支持所有符合JDBC规范的Datasource数据源连接池,它们的配置和本文中的配置基本一致。tomcat的jdbc pool的配置请参考文档:
bboss persistent通过jndi引用外部数据源(datasource)方法 

weblogic和websphere提供的数据源的配置和tomcat类似。
1 楼 liuhu2967 2013-09-17  
你好,我是BBOSS的忠实用户,请问下是否能支持下boneCP tomcat jdbc pool 等高性能的连接池

相关推荐

    bboss ioc配置文件中使用外部属性文件介绍

    &lt;bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"&gt; ${db.driver}" /&gt; ${db.url}" /&gt; ${db.username}" /&gt; ${db.password}" /&gt; &lt;!-- 其他配置... --&gt; ``` 这里...

    基于Java的bboss插件集设计源码,涵盖文档转换及持久层技术

    Hibernate主要负责对象持久化和数据持久层的操作,而Dubbo则是阿里巴巴开源的高性能Java RPC框架,用于实现服务的远程调用和治理。 描述部分则更进一步解释了源码包所包含的具体文件类型,包括163个Java源文件,这...

    由 bboss 开源的数据采集&流批一体化工具,提供数据采集、数据清洗转换处理和数据入库以及数据指标统计计算流批一体化处理功能

    bboss-datatran 支持多种数据源的接入,如关系型数据库(MySQL、Oracle等)、NoSQL数据库(HBase、MongoDB等)、消息队列(Kafka、RabbitMQ等)以及文件系统(HDFS、FTP等)。通过内置的适配器,用户可以方便地将...

    bboss 插件工程,持久层hibernate/hibernate4插件

    工程中的持久层hibernate/hibernate4插件是bboss工程的核心组件之一,为开发者提供了一套便捷的ORM解决方案,使得数据持久化操作变得更加简洁和高效。通过hibernate插件,开发者可以更轻松地进行数据库操作,无需...

    bboss mvcdemo 下载地址

    - 安装与配置指南:如何下载和设置BBoss MVCDemo环境,包括JDK、应用服务器(如Tomcat)、数据库等的配置。 - 快速入门:简单的示例展示如何创建第一个BBoss MVCDemo应用,包括编写控制器、模型和视图。 - 请求处理...

    springboot整合bboss es增删改查测试demo代码

    本实例是一个基于bboss es spring boot starter的demo maven工程,可供spring boot项目集成bboss elasticsearch rest client参考 展示了通过spring boot管理单集群功能和管理多集群功能 单集群测试用例:...

    由 bboss 开源的数据采集同步ETL工具,提供数据采集、数据清洗转换处理和数据入库以及数据指标统计计算流批一体化处理功能

    bboss-datatran 由 bboss 开源的数据采集&流批一体化工具,提供数据采集、数据清洗转换处理和数据入库以及数据指标统计计算流批一体化处理功能。 同时也是一个高性能Elasticsearch orm 客户端,100%兼容es各个版本 ...

    bboss elasticsearch-5.7.8.rar

    3. `bboss-util-5.5.0.jar`和`bboss-persistent-5.5.0.jar`:这是BBoss框架的核心组件,提供了许多实用工具类和持久化操作支持,如数据库连接、事务管理等,为Elasticsearch的数据导入提供底层支持。 4. `...

    bboss会话共享培训文档

    bboss会话共享是一种分布式会话管理技术,它针对在集群环境下应用部署时如何解决会话数据丢失和单点登录问题提供了专门的解决方案。根据提供的文档内容,我们可以详细探讨bboss会话共享涉及的关键知识点。 首先,...

    bboss-plugins-kafka

    这些组件和概念表明bboss-plugins-kafka项目不仅关注于Kafka,还包括了分布式服务注册与配置管理的nacos、日志处理的log4j、流行的应用框架spring、消息中间件rocketmq、文档处理工具word和pdf、PDF转SWF格式转换...

    bboss-elasticsearch开发环境搭建和开发入门视频教程.

    5. **配置BBoss**: 根据项目需求,配置 BBoss 的连接参数,如集群地址、端口等。 **四、开发入门** 1. **创建索引**: 使用 BBoss 提供的 API 创建索引,指定映射(Mapping)以便对数据类型进行定义。 2. **插入数据...

    bboss elasticsearch介绍

    bboss es特点请访问: https://www.oschina.net/p/bboss-elastic

    企业级J2EE开源框架bboss

    2. **数据库操作**:BBoss提供了便捷的数据访问层(DAO),支持SQL动态生成、事务管理以及多种数据库的兼容性,使得数据库操作变得简单且高效。 3. **服务治理**:框架内置了服务注册与发现机制,可以实现微服务...

    bboss+es基本操作示例.zip

    集成bboss和Elasticsearch时,首先需要在项目中引入bboss的依赖,并配置Elasticsearch的相关连接信息,如集群名称、节点地址等。然后可以通过bboss提供的API进行索引创建、数据插入、查询、更新、删除等操作。 4. ...

    springboot集成ElasticsearchBboss调用Elasticsearch.md

    springboot集成ElasticsearchBboss调用Elasticsearch的案例分享

    bboss persistent 1.0.2中方便地实现大字段(clob,blob)的处理

    BBoss Persistent是一个轻量级的持久层框架,它提供了方便的方式来处理这些大字段。本文将深入探讨在BBoss Persistent 1.0.2中如何高效地管理CLOB和BLOB数据。 首先,CLOB用于存储大量的文本数据,如长篇文章或XML...

    bboss分布式事件框架介绍文档

    bboss平台的缓存使用现状包括权限缓存、字典缓存、组织数据缓存、角色数据缓存、用户数据缓存、用户组数据缓存、部门管理员数据缓存、通用参数缓存、数据库元数据缓存以及CMS相关数据缓存。 bboss分布式事件框架的...

    bboss 安全认证过滤器功能介绍

    BBoss安全认证过滤器是Java Web开发中一种用于实现用户身份验证和权限控制的重要组件。在Web应用程序中,过滤器(Filter)是Servlet规范的一部分,它允许开发者在请求到达目标Servlet或JSP之前进行预处理,以及在...

    基于Java的bboss-datatran数据采集与流批一体化处理工具设计源码

    本bboss-datatran项目基于Java开发,包含591个文件,包括Java源代码、Markdown文档、GIT忽略文件、Gradle构建文件、Properties配置文件、Preferences配置文件、XML配置文件、GIT属性文件、LICENSE文件和PNG图片。...

    bboss-db-elasticsearch-tool-master_java_

    在Java中,传统的JDBC编程方式往往需要编写大量重复的SQL代码,而ORM框架如BBoss-DB-Elasticsearch-Tool则通过元数据(如注解或XML配置)将Java对象与数据库表映射起来,实现了数据的透明访问。这极大地提高了开发...

Global site tag (gtag.js) - Google Analytics