博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bboss持久层多数据源配置及多数据库事务控制使用方法
阅读量:4106 次
发布时间:2019-05-25

本文共 3889 字,大约阅读时间需要 12 分钟。

bboss持久层多数据源配置及使用方法,持久层框架及demo下载请参看文档:
 


1.配置多个数据源-poolman.xml
 

在classes类路径根目录下准备好dbcp.xml和dbcp1.xml两个配置文件(基于bboss ioc语法) 

dbcp.xml: 

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

dbcp1.xml: 

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


在poolman.xml中装载这两个数据源: 

Xml代码  
  1. <poolman>  
  2.   
  3.   <datasource>  
  4.   
  5.         <dbname>ds0</dbname>  
  6.         <loadmetadata>false</loadmetadata>  
  7.         <enablejta>true</enablejta>  
  8.         <jndiName>ds0_datasource_jndiname</jndiName>  
  9.         <datasourceFile>dbcp.xml</datasourceFile>  
  10.         <autoprimarykey>false</autoprimarykey>  
  11.         <showsql>true</showsql>  
  12.         <keygenerate>composite</keygenerate>  
  13.                 <RETURN_GENERATED_KEYS>true</RETURN_GENERATED_KEYS>  
  14.                 <queryfetchsize>10000</queryfetchsize>  
  15.     </datasource>  
  16. <datasource>  
  17.   
  18.         <dbname>ds1</dbname>  
  19.         <loadmetadata>false</loadmetadata>  
  20.         <enablejta>true</enablejta>  
  21.         <jndiName>ds1_datasource_jndiname</jndiName>  
  22.         <datasourceFile>dbcp1.xml</datasourceFile>  
  23.         <autoprimarykey>false</autoprimarykey>  
  24.         <showsql>true</showsql>  
  25.         <keygenerate>composite</keygenerate>  
  26.                 <RETURN_GENERATED_KEYS>false</RETURN_GENERATED_KEYS>  
  27.     </datasource>  
  28. </poolman>  


配置了两个数据源ds0和ds1,下面介绍利用持久层api在不同数据源上执行db操作。 


queryfetchsize:指定数据源对应的jdbc 查询操作的fetchsize,不指定的话采用jdbc默认设置
 


2.多数据源api及多数据源事务控制实例
 

目前bboss常用的数据库访问组件ConfigSQLExecutor和SQLExecutor都提供了多数据源操作api,这种api中都显示地指定dbname参数,也就是数据源的名称,例如上面的ds0和ds1;另外一种api是不带dbname参数,这种api默认在poolman.xml文件中配置的第一个数据源上执行db操作。两种api举例说明如下(以SQLExecutor组件为例来说明,ConfigSQLExecutor组件除了sql语句从配置文件中读取外,它的api与SQLExecutor组件api一致,就不额外介绍ConfigSQLExecutor了。): 


Java代码  
  1. TransactionManager tm = new TransactionManager();  
  2. try{  
  3. tm.begin();//开始事务  
  4. SQLExecutor.delete("delete from LISTBEAN where id=?",1);//不带数据源dbname的api,默认在第一个数据源上执行db操作,也就是ds0数据源。  
  5.         SQLExecutor.deleteWithDBName("ds0","delete from LISTBEAN where id=?",1);//显示指定db操作在ds0数据源上操作  
  6.         SQLExecutor.deleteWithDBName("ds1","delete from LISTBEAN where id=?",1);//显示指定db操作在ds1数据源上操作  
  7. tm.commit();//提交事务  
  8. }  
  9. catch(Exception e)  
  10. {  
  11.    throw e;  
  12. }  
  13. finally  
  14. {  
  15.    tm.release();//释放事务资源,如果有异常发生,则会回滚事务  
  16. }  

上面是以删除操作来做说明,同时我们将两个数据源上的数据库操作包含到一个事务中,这样很好地保证了多数据库操作事务的一致性。其它操作(插入,修改,查询)类似也不举例一一介绍了,具体可参考以下示例文件: 

 

 

 

转载地址:http://wbnsi.baihongyu.com/

你可能感兴趣的文章
iOS开发 - 苹果开发者账号那些事儿(一)
查看>>
iOS开发 - 苹果开发者账号那些事儿(二)
查看>>
iOS开发 - 苹果开发者账号那些事儿(三)
查看>>
Win10开发 - VS2015中可能遇到的问题
查看>>
iOS开发 - 通过ssh安装iPhone软件
查看>>
iOS开发 - Keychain共享
查看>>
iOS开发 - iOS开发中证书失效的一些问题
查看>>
WP开发 - 与iOS开发的一些区别
查看>>
iOS开发 - iOS9适配
查看>>
Win32开发 - VS2012常用插件
查看>>
IDE工具 - VS2012中NuGet安装第三方库
查看>>
WP开发 - HttpWebRequest的GetResponse或GetRequestStream的超时问题
查看>>
工具使用 - IDA使用
查看>>
WP开发 - 引入dll出现“无法向项目中添加对较高版本或不兼容程序集的引用”
查看>>
Windows下一些三方库的编译以及使用(openssl,lua,curl,boost)
查看>>
iOS开发 - 如何向App Store提交应用
查看>>
iOS开发 - Xcode7下解决使用三方库出现的warning问题
查看>>
WP开发 - WP设备解锁
查看>>
iOS开发 - CocoaPods的安装及使用
查看>>
iOS开发 - Bitcode适配指南
查看>>